好记性不如烂笔头(awk简单使用)

awk其实可以看做是在shell中运行的独立程序,shell中获取的字符数据传入awk中做进一步处理:


如:ls -all | awk ‘{print $1}’ 表示对当前目录使用了ls -all,该linux命令会显示n行的信息,这些数据会传入awk中,然后每行都会执行一次{print $1}内容。这就是awk的基本工作原理,更详细的你查书吧,还有些BEGIN啥的都可以省略。


实际例子1:(删除linux当前的所有队列)

ipcs -q | awk '/0x/ {print "ipcrm -q ",$2}' | sh

其中的‘/0x/’表示如果该行中有0x字符才会运行一次awk的行处理程序。

接着的{print "ipcrm -q ",$2}' | sh,原本只有{print "ipcrm -q ",$2}' 就是输出ipcrm -q 加上每行的$2(第二个字符串字段内容,所谓字段就是空格隔开的字符串),现在接了|sh,表示ipcrm -q 加上每行的$2(第二个字符串字段内容),这些内容再次当做脚本执行一次,这里具体也就删除了一个队列(如ipcrm -q 0x123456)。



实际例子2:(当目标文件/opt/log_data.txt的大小超过60000byte时,删除)

ls -all  /opt/log_data.txt | awk '{if($5 >= 60000) print "rm -rf /opt/log_data.txt"}' | sh

其中awk的行变量$5是文件的大小,awk行代码的($5 >= 60000)这么比较,是比较的字符串还是数值大小,我也不知道,反正这么比较目前的结果的确是在比较数值的大小,最终一样将awk的print内容返回脚本执行,即|sh



后期有这么几个地方需要补充:

1:shell变量如何进入awk,awk中的变量如何传回shell

2:awk的行条件过滤还是不错的,记录一些

3:追加|sh的意义,我看到还有些shell中有追加|read xxx

猜你喜欢

转载自blog.csdn.net/aazhoukeaa/article/details/72866767