awk

awk也是一个数据处理工具!相较于 sed 常常作用于一整个行的处理, awk 则比较倾向于一行当中分成数个字段来处理。

awk命令的基本格式为:awk  [-F field-separator]  'commands'  filename

其中,[-F域分隔符]是可选的,因为awk使用空格或tab键作为缺省的域分隔符。commands 是awk要执行的命令动作。filename是要处理的文件。

awk 的强大之处在于commands,它由2部分组成,分别为匹配规则和执行命令,如下所示:

'匹配规则{执行命令}'

awk命令的完整格式:awd [-F field-separator] '匹配规则{执行命令}' filename

任何awk语句都是由'匹配规则{执行命令}'组成,一个awk中可以有多个语句匹配规则决定执行命令的执行条件

例子:

awk '/^$/ {print "Blank line"}' test.txt

在此命令中,/^$/ 是一个正则表达式,功能是匹配文本中的空白行

awk -F: '$7 ~ /bash$/ {print $1}' /etc/passwd

判断$7(第7个数据字段)的值是否匹配正则表达式/bash$/

匹配规则(即执行条件):

 一般使用关系表达式作为条件。这些关系表达式非常多,具体参考下表:

条件类型

条 

说 

awk保留字

BEGIN

在awk程序一开始,尚未读取任何数据之前执行。BEGIN 后的动作只在程序开始时执行一次

awk保留字

END

在awk程序处理完所有数据,即将结束时执行。END 后的动作只在程序结束时执行一次

关系运算符

大于

小于

>=

大于等于

<=

小于等于

==

等于。用于判断两个值是否相等。如果是给变童赋值,则使用"=”

!=

不等于

匹配表达式

~(匹配)

value ~ /regexp/ 如果value匹配/regexp/,则返回真

!~(不匹配)

value !~ /regexp/ 如果value不匹配/regexp/,则返回真

正则表达式

/正则表达式/

如果在“//”中可以写入字符,则也可以支持正则表达式,如:/root/表示匹配含有root的行。

逻辑运算符

&&

逻辑与

||

逻辑或

执行命令(动作action):

awk的执行命令在大括号{ }内指明。动作大多数用来打印(即print指令),但是还有些更长的代码诸如if和循环语句及循环退出结构。如果不指明采取动作,awk将打印出所有浏览出来的记录。

动作(Action):

  格式化输出(print);

  流程控制语句(if、while、for等);

例如:显示passwd文件中第1个第6个字段的信息

awk -F: '{print $1 "\t" $6}' /etc/passwd

posted @ 2020-07-21 23:04  轩辕吊雷  阅读(226)  评论(0编辑  收藏  举报