一起学习awk(一)

像sed一样,awk是UNIX重要的工具,目前有三个版本:

AWK - the (very old) original from AT&T

NAWK - A newer, improved version from AT&T

GAWK - The Free Software foundation’s version

通常情况下,awk还是使用最为普遍的。

一、为什么要学习awk

awk是很优秀的过滤器和报告编写器,能够很方便的处理文本文件,尤其是其能够特异性的针对行、列进行文本处理,这使得awk比其他传统的语言都要方便。你可以把它看成是伪C语言,它和C语言有很多相似的地方。使用它能够对字符串处理,包括搜索、过滤、编辑、控制输出等。尤其是配和其他的shell命令及管道命令,是的文本处理异常方便。如果你用R或者Python处理文本,你要写一个脚本,导入各种包和模块,然后读入文件,然后再按照自己需求一步一步处理,而在awk中,可能你仅仅需要一行命令即可。

另外,awk本身的含义并不是笨拙的意思(awkward),它实际上是其开发者名字的首字母缩写。

二、基本结构

awk语言的基本组织形式是:

pattern

其中pattern用于说明何时执行action。和很多其他unix工具一样,awk也是按行来执行的。pattern用来检验读入的每一行是否符合条件,如果是,该行则在action中被处理。默认条件下,pattern是能够匹配每一行,也就是所有行都会在action中进行处理。

此外,还有经常用到的两个关键字“BEGIN”和“END”。“BEGIN”用来说明在开始读入行之前的行为,“END”用来说明处理完所有行之后的行为。

BEGIN { print “START” }

pattern { action }

END { print “STOP” }

例子:$ls -ltrh能够列出当前文件路径下所有的文件信息,如下,

那么如果我只想要文件名和文件大小,该怎么处理呢?

只需要这一行就可以输出:

其中,"ls -ltrh"不做过多解释,就是按时间逆序列出所有文件的详细信息;“|”就是管道操作符, 即将前面的标准输出作为下一个命令的标准输入;后面就进入awk命令,整个命令用单引号,其中“NR>1"实际pattern,来判断后面action,即“”是否执行。“NR”指行数,“NR>1"代表从第二行开始执行action。在执行之前,还有“BEGIN”命令用于先行输出”FILE\tSIZE",其中\t表示制表符;另外$9和$5分别代表一行中第9个和第5个参数(和Linux一样),在这儿你可以理解为每一行的第9列和第5列。

需要指出的是awk能够识别双引号中的"\t",但是不能够识别双引号中的“$9",这一点和Linux不同。所以你如果写成

就会出现错误的输出!

当然,你也可以把它写成脚本。保存成awk_example.sh,然后

通过这一部分,我们可以初步了解awk的语法结构。后面会有更多详细用法。

====== THE END =====

参考资料:http://www.grymoire.com/Unix/Awk.html

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180613G1WDF800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券