2012-04-30 57 views
2

我需要一个文件并计算$ 7的出现次数 - 我已经用awk完成了这个操作(因为我需要通过更多的awk运行此操作)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来更改 -

+1

我不知道一个可以管一些输出到AWK脚本中的字符串中的外部命令。太好了! – brandizzi

回答

3

如果要将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 

应该工作。

+0

真棒回答,谢谢:D –

1

如果使用Gawk的,你可以使用通信2路将数据推到外部命令,然后读出来:

#!/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