5个例子征服awk

Posted jiage666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5个例子征服awk相关的知识,希望对你有一定的参考价值。

awk是非常实用的文本处理工具,我们试图用5个例子了解awk的基本用法

基本用法:awk BEGIN{扫描前执行的操作} ‘匹配模式{执行的操作}‘ END{扫描后执行的操作}

其中,BEGIN{扫描前执行的操作}和END{扫描后执行的操作}不是必须的

例子1:netstat -alepn | awk ‘$1=="tcp" && $6=="LISTEN"‘

解释:通过管道获得netstat -alepn命令的输出,扫描每行文本,判断该行的第1列是否为‘tcp’ 以及第6列是否为‘listen’,若是则该行匹配成功,扫描完后输出所有匹配成功的行

例子2: netstat -alepn | awk ‘$1=="tcp" && $6=="LISTEN"{print $4}‘

解释:通过管道获得netstat -alepn命令的输出,扫描每行文本,判断该行的第1列是否为‘tcp’ 以及第6列是否为‘listen’,若是则该行匹配成功,最后打印所有匹配成功的行的第4列

例子3: netstat -alepn | awk ‘$6 ~/LISTEN|WAIT/{print $4}‘

解释:匹配模式还可以有另外的写法

例子4:netstat -alepn | awk ‘BEGIN{print "protcol status"}$6 ~/LISTEN|WAIT/{print $1, $6}‘

解释:第一行输出protcol status 再输出匹配行的指定列

例子5: ls -l *.c |awk ‘{sum+=$5} END{print sum}‘

解释:获得当前啊路径下所有.c文件的大小累加并打印总大小

 

另外: 

上面例子中的输入文件都是来自管道,其实也可以来自指定文件

比如:awk ‘$1=="tcp" && $6=="LISTEN"‘ test.log

扫描的文件是来自当前路径下的test.log文件

还有,awk分割列的时候默认采用的是空格符或者tab

还可以通过-F 分割符的方式指定特殊的分割符

比如:awk -F: ‘$1=="tcp" && $6=="LISTEN"‘ test.log

采用:作为列的分割符

 

以上是关于5个例子征服awk的主要内容,如果未能解决你的问题,请参考以下文章

[linux]使用awk截取文段例子

awk命令例子详解

awk 用法(自己笔记)

sh awk例子

sh awk例子

awk呀