2012-04-30 103 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