O、介绍awk
1、基于模式匹配检查输入文本,逐行处理并输出
2、通常用于在shell脚本中,获取指定的数据
3、单独使用时,可以对文本数据做统计
一、awk不同与sed和grep的地方
1、grep的作用是从文件中过滤并显示出指定内容的内容行。
2、sed除了可以从文件中过滤出指定内容的内容行,还能对文件的行数据进行非交互式编辑和其他操作。
3、awk用于对指定文件的数据进行分列,区别与以行作为数据单位,awk可以将内容按照规则分列,并对逐列的数据进行非交互式编辑和其他操作。
二、awk语法
1、前置命令 | awk [选项] ‘[条件]{指令}’
前置命令的执行结果管道给awk
2、awk [选项] ‘[条件]{指令}’文件
使用awk逐行遍历指定文件中的内容并进行特定处理
三、awk风格
类似于编程语言,具有编程语言的特定,例如:
1、多条指令语句可以用分号;分割
2、支持if,for判断
3、变量必须使用双引号,而不是Linux系统下的单引号,双引号,反引号三个
四、awk的print打印功能
1、awk ‘{print}’ dir
打印文件中的列内容,从第一行开始所有列,到最后一行的所有列。
2、awk ‘{print $1,$3,$2}’ dir
打印文件中的第1列,第3列,第2列,默认以空格或tab划分,如果是打印$0则表示打印所有列,就是完整行
3、awk -F: ‘{print $1,$3}’ dir
-F可以指定分隔符,默认分隔符为空格和tab键,分隔符不会作为打印内容输出。
4、awk ‘{print “value1:”,$1,“value2:”,$2}’ dir
需要打印的常量需要用引号,print后面的打印内容用逗号隔开时,对应的都好会在打印时变成空格,没有逗号的内容中间则不会有空格。
五、awk的内置变量,NF,NR有特殊含义,可直接使用
1、$n 指定分割的第n列字段,$1表示第一列
2、$0 整行,所有列
3、NF 记录当前处理行的分割列数,用法:
awk ‘{print NF}’ dir
打印每一行的列数
awk ‘{print $NF}’ dir
打印每一行的最后一列,行的列数对应的列就是最后一列。
支持通过±运算得出的列数,比如:
awk ‘{print $(NF-2)}’ dir
就是打印倒数第三列
4、NR 记录当前已读入行的数量,行号
awk ‘{print NR}’ dir