请你来说一下AWK的使用

Source

参考回答:

1)作用:

样式扫描和处理语言。它允许创建简短的程序,这些程序读取输入文件、为数据排序、
处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

2)用法:

awk [-F  field-separator]  'commands'  input-file(s)

3)内置变量

ARGC                                 命令行参数个数

ARGV                                 命令行参数排列

ENVIRON                              支持队列中系统环境变量的使用

FILENAME                             AWK浏览的文件名

FNR                                  浏览文件的记录数

FS                                   设置输入域分隔符,等价于命令行 -F选项

NF                                   浏览记录的域的个数

NR                                   已读的记录数
 
OFS                                  输出域分隔符

ORS                                  输出记录分隔符

RS                                   控制记录分隔符

4)实例:

1、找到当前文件夹下所有的文件和子文件夹,并显示文件大小

> ls -l | awk '{print $5 "\t" $9}'

读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域
,填充域。$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分
隔符是"空白键" 或 "[tab]键"。

2、找到当前文件夹下所有的文件和子文件夹,并显示文件大小,并显示排序

> ls -l | awk 'BEGIN {COUNT = -1; print "BEGIN COUNT"}
{COUNT = COUNT + 1; print COUNT"\t"$5"\t"$9}
END {print "END, COUNT = "COUNT}'
先处理BEGIN, 然后进行文本分析,进行第二个{}的操作,分析完进行END操作。

3、找到当前文件夹下所有的子文件夹,并显示排序

> ls -l | awk 'BEGIN {print "BEGIN COUNT"} /4096/{print NR"\t"$5"\t"$9}

END {print "END"}'

* /4096/ 正则匹配式子

* 使用print $NF可以打印出一行中的最后一个字段,使用$(NF-1)则是打印倒数第二个字段,其他以此类推。