@boothsun
2017-03-02T09:39:49.000000Z
字数 1459
阅读 1364
Linux
awk是一个强大的文本分析工具,相对于grep的查找,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切成的部分再进行各种分析处理。
awk的最基本功能是在文件中或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完成的awk脚本通常用来格式化文本文件中的信息。
awk '{pattern + action}' {filename}
或
awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' fileName
一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的统一语句块、END语句块3部分组成,这三个部分都是可选的。
BEGIN {commands}
语句块中的语句;第三步:当读至输入流末尾,END{commands}
语句块。
BEGIN语句块在awk开始从输入流中读取之前被执行,可选,通常用于变量初始化、打印输出表格的表头等操作。
END语句块在awk从输入流中读取完所有的行之后被执行,通常打印所有行的分析结果等。
pattern语句块中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{print}
,即打印每一个读取到的行,awk读取的每一行都会执行该语句块。
awk [-F field-separator] 'commands' input-file(s)
shell脚本方式
将所有的awk命令插入一个文件,并使程序可执行,然后awk命令解释器作为脚本的首行。相当于shell脚本首行的:#!/bin/sh 可以换成: #!/bin/awk
将所有的awk命令插入一个单独文件,然后调用:
awk -f awk-script-filename input-file(s)
pattern 模式可以是以下任意一个:
~
(匹配)和!~
(不匹配)action 操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内。
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
此外,$0
变量是指整条记录。$1
表示当前行的第一个域,$2
表示当前行的第二个域..... , 以此类推。同时,使用$NF
可以表示最后一个字段,使用$(NF-1)
则是打印倒数第二个字段,其他也是以此类推。
print函数的参数可以是变量,数值或者字符串。
printf提供了格式化的打印输出。