2024年11月Linux如何使用文本处理工具awk(4)

发布时间:

  ⑴awk ’BEGIN {FS=“:”; print FILENAME} {print FILENAME}‘ /etc/passwd #FILENAME,$-$N,NF 不能使用在BEGIN中,BEGIN中不能获得任何与文件记录操作的变量。

  ⑵h.获得linux环境变量(ENVIRON

  ⑶awk ’BEGIN {print ENVIRON[“PATH”];}‘ /etc/passwd #ENVIRON是子典型数组,可以通过对应键值获得它的值。

  ⑷i.输出数据格式设置(OFMT

  ⑸awk ’BEGIN {OFMT=“%.f”; print /,.;}‘ /etc/passwd #OFMT默认输出格式是:%.g 保留六位小数,这里修改OFMT会修改默认数据输出格式

  ⑹j.按宽度指定分隔符

  ⑺echo | awk ’BEGIN {FIELDWIDTHS=“ ”} {print $“-”$“-”$,$“:”$“:”$}‘ #FIELDWIDTHS其格式为空格分隔的一串数字,用以对记录进行域的分隔,FIELDWIDTHS=“ ”就表示$宽度是,$是,$是 。。.。 。这个时候会忽略:FS分隔符

  ⑻k.RSTART RLENGTH

  ⑼awk ’BEGIN{start=match(“this is a test”,/[a-z]+$/; print start, RSTART, RLENGTH }‘

  ⑽awk ’BEGIN{start=match(“this is a test”,/^[a-z]+$/; print start, RSTART, RLENGTH }‘ #RSTART被匹配正则表达式首位置,RLENGTH匹配字符长度,没有找到为-.

  ⑾a.获取普通的外部变量

  ⑿test=’awk code‘

  ⒀echo | awk ’{print test}‘ test=“$test”

  ⒁echo | wawk ’BEGIN {print test}‘ test=“$test” #传入的变量可以在action中获取值,但是变量名与值放到’{action}‘后边。其中BEGIN的action是不能获得

  ⒂b.BEGIN程序块的变量

  ⒃test=’awk code‘

  ⒄echo | awk -v test=“$test” ’BEGIN {print test}‘

  ⒅echo | awk -v test=“$test” ’{print test}‘ #用-v 传入变量可以在中类型的action 中都可以获得到,但顺序在 action前面

  ⒆c.获得环境变量

  ⒇awk ’BEGIN {for (i in ENVIRON {print i“=”ENVIRON[i];}}‘

  ⒈a.赋值运算符、算术运算

  ⒉echo | awk ’BEGIN {a=; b=; c=} {a+=; b++; c--} END {print a, b, c, a*b}‘

  ⒊awk ’BEGIN {a=; b=; print (a》 && b《=,(a》 || b《=;}‘

  ⒋awk ’BEGIN{a=“”;if(a 》= {print “ok”;}}‘ #》 《 可以作为字符串比较,也可以用作数值比较,关键看操作数如果是字符串 就会转换为字符串比较。两个都为数字 才转为数值比较。字符串比较:按照ascii码顺序比较

  ⒌awk ’BEGIN {a=“b”; print a==“b” ? “ok” : “err”;}‘ #三目运算

  ⒍awk ’BEGIN {a=“b”; arr[]=“b”; arr[]=“c”; print (a in arr;}‘ #判断数组中是否存在该键值

  ⒎a.字符串转数字

  ⒏awk ’BEGIN {a=“”; b=“test”; print (a+b+;}‘

  ⒐awk ’BEGIN {a=“”; b=“test”; print a+b+;}‘

  ⒑b.数字转字符串

  ⒒awk ’BEGIN {a=; b=; c=(a“”b; print c}‘

  ⒓awk ’BEGIN {a=; b=; c=a“”b; print c}‘

  ⒔awk ’BEGIN {a=“a”; b=“b”; c=a“”b; print c}‘

  ⒕awk ’BEGIN {tB[“a”]=“a”; tB[“b”]=;}‘

  ⒖b.数组长度(length

  ⒗awk ’BEGIN {tB[“a”]=“a”; tB[“b”]=; print length(tB}‘

  ⒘awk ’BEGIN {info=“it is a test”; split(info,tA,“ ”; print asort(tA;}‘ #asort对数组进行排序,返回数组长度