AWK


awk

语法形式

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

主要分成三块

  • BEGIN块:只会执行一次,常用于变量初始化
  • pattern块:awk是以行为单位处理的。每读取一行,就是用pattern块进行处理
  • END块:也是执行一次,在所有行处理完后执行,一般用于打印一些统计结果
cat /etc/passwd | awk 'BEGIN{sum=0} pattern{sum++} END{printf "%s\n",sum}'

对于每一行,通过分隔符进行分割成若干个字段,然后使用$1,$2… 来调用。
默认的分割符是空格和制表符。可以使用-F参数来指定分割符

$ echo 'name:acount:passwd'|awk -F ':' '{ print $3 }'
passwd

内置变量

  • FILENAME:当前文件名
  • FS:字段分割符,默认是空格和制表符
  • NF:Number of Field,当前行的字段的个数,字段数量
  • BR:行号,当前处理的文本行的行号
  • RS:行分隔符,用于分割每一行。默认是换行符
  • OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
  • ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
    echo 'name:acount:passwd'|awk -F ':' '{ print $(NF-1) }'

使用正则表达式

正则表达式放在pattern的位置,这里使用”:”作为分行符

echo 'name:account:passwd'|awk 'BEGIN{RS = ":"} $0~/.*c.*/ {print $0}'

也可以使用if else 语句处理

echo 'name:account:passwd'|awk 'BEGIN{RS = ":"} $0~/.*c.*/ {print $0}'

echo 'name:acount:passwd'|awk 'BEGIN{RS = ":"} {if($0!~/.*c.*/) print $0; else print "---"}'

内置函数

  • tolower():字符转为小写。
  • length():返回字符串长度。
  • substr():返回子字符串。
  • sin():正弦。
  • cos():余弦。
  • sqrt():平方根。
  • rand():随机数。

文章作者: 彭峰
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 彭峰 !
  目录