请你来说一下awk的使用
参考回答:
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)则是打印倒数第二个字段,其他以此类推。