我需要一个文件并计算$ 7的出现次数 – 我已经用awk做了这个(因为我需要通过更多的awk来运行这个)
我想要做的就是把它合并成一个脚本 – 到目前为止我已经有了
#! /usr/bin/awk -f # get the filename, count the number of occurs # <no occurs> <filename> { print $7 | "grep /datasheets/ | sort | uniq -c"}
我如何获取输出,并通过更多的awk命令运行它 – 在同一个文件中
最终,我需要能够运行
./process.awk <filename>
所以它可以成为以前的设置的替代品,这将花费太多时间/ effor来改变 –
如果您想将awk脚本的输出转发到另一个awk脚本,只需将其输入awk即可。
awk 'foobar...' file|awk 'new awkcmd'
而你当前的awk|grep|sort|uniq
可以用awk本身完成。 保存你的3个进程。 你想得到重复的计数,不是吗?
awk '$7~=/datasheets/{a[$7]++;} END{for(x in a)print x": "a[x]' file
应该管用。
如果使用Gawk,则可以使用双向通信将数据推送到外部命令,然后再读取它:
#!/usr/bin/gawk -f BEGIN { COMMAND = "sort | uniq -c" SEEN = 0 PROCINFO[ COMMAND, "pty" ] = 1 } /datasheets/ { print $7 |& COMMAND SEEN = 1 } END { # Don't read sort output if no input was provided if ( SEEN == 1 ) { # Tell sort no more input data is available close( COMMAND, "to" ) # Read the sorted data while( ( COMMAND |& getline SORTED ) > 0 ) { # Do whatever you want on the sorted data print SORTED } close( COMMAND, "from" ) } }
请参阅https://www.gnu.org/software/gawk/manual/gawk.html#Two_002dway-I_002fO