AWK命令

AWK是一种处理文本文件的语言,是一个强大的文本分析工具。

语法:

awk [options] 'pattern{action}' file
awk [-F|-f|-v] ‘BEGIN{ commands }  pattern{ commands }  END{ commands }’ file
  •  [-F|-f|-v]   大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value。
  • BEGIN (可选)BEGIN语句块在awk读取输入流中读取行之前执行,如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。
  • END 处理完所有的行后要执行的语句。

awk工作流程:

BEGIN→读取文件,遇到/n换行符时分割一条记录,将记录按分隔符划分域,填充域,执行指点的命令动作,依次读取行,执行动作到处理完所有记录→END

参数:

  • -F:指定分隔符
    awk -F: '{print $1}' log.txt    #以""为分隔符
  • -f:调用脚本
    awk -f cal.awk log.txt    #调用脚本cal.awk处理log.txt文件
  • -v:设置变量
    awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt    #定义变量a,b

 运算符:

运算符描述
= += -= *= /= %= ^= **= 赋值
|| 逻辑或
&& 逻辑与
~ 匹配,与==相比不是精确比较
~! 不匹配,不精确比较
< <= > >= != == 关系运算符
^ *** 求幂
++ -- 增加或减少,作为前缀或后缀
$ 字段引用
in 数组成员

 内建变量:

变量描述
$n 当前记录的第n个字段,字段间由FS分隔
$0 表示整个当前行
NF 一条记录的字段的数目
NR 已经读出的记录数,就是行号,从1开始
FNR 各文件分别计数的行号
OFS  输出字段分隔符, 默认也是空格,可以改为制表符等
ORS 输出记录分隔符(默认值是换行符)
FILENAME 当前文件名
RS 记录分隔符(默认是一个换行符)
FS 字段分隔符(默认是任何空格)

 

 实例:

打印出/etc/passwd 第一个域,并且在第一个域所有的内容前面加上“用户帐号:”

 awk -F: '{print "用户账号:"$1}' /etc/passwd

匹配/etc/passwd 第三域大于100的显示出完整信息

awk -F: '{if($3>100)print $0}' /etc/passwd

打印第一域,并且打印头部信息为:这个是系统用户,打印尾部信息为:"================"

awk -F: 'BEGIN{print "这个是系统用户"}{print $1}END{print "==========="}' /etc/passwd

打印行号小于15的,并且最后一域匹配bash的信息

awk -F: '{if(NR<15&&$NF~/bash/)print $0}' /etc/passwd

打印出第一域匹配daemon的信息

awk -F: '$1~/daemon/{print $0}' /etc/passwd

请打印出第三域数字之和

awk -F: '{sum+=$3} END{print sum}' /etc/passwd

请将/etc/passwd 中的root替换成gongda,临时替换

awk -F: 'gsub(/root/,"gongda"){print $0}' /etc/passwd

 判断/etc/passwd 中用户的类型

awk -F: '{if($3==0)print "超级用户:"$1 ;else if($3>0&&$3<1000) print "系统用户:"$1;else print"自建用户:"$1}' /etc/passwd

 

官方手册:

http://www.gnu.org/software/gawk/manual/gawk.html

 参考链接:

https://blog.csdn.net/fly910905/article/details/82726840

http://www.runoob.com/linux/linux-comm-awk.html

posted on 2018-11-27 17:19  JaxDeng  阅读(135)  评论(0)    收藏  举报

导航