2017-08-31 71 views
0

Varlog提供了一個解決方案,前一個問題是查找相應的DISCHARGE事件到一個INDUCT,並從數組中刪除它。這給我留下了所有尚未運往目的地的物品。分組GAWK輸出

這個腳本(下)的輸出

/REDIRECT_ITEM_REPLY/ { 
    match($0, /itemId=<([^>]+)>/, ary1) 
    match($0, /CscdestinationId=<([^>]+)>/, ary2) 
    dest[ary1[1]] = ary2[1] 
} 

/DISCHARGE_VERIFIED/ { 
    match($0, /itemId=<([^>]+)>/, ary1) 
    delete dest[ary1[1]] 
} 

END { 
    for (id in dest) { 
     print dest[id] 
    } 
} 

OUTPUT:

17: CHU207 
17: CHU207 
35: CHU214 
1: CHU001 
157: FLY437 
115: FLY424 
108: FLY321 

我想GROUP這一信息納入類似:

CHU207 - 5 
CHU001 - 10 
FLY437 - 3 

我思考使用UNIQ命令,但只是想知道如何將其納入腳本,感謝您的幫助p

我一直在使用的uniq -c嘗試了命令行方式,但不知道這是最好的辦法

gawk -f inductedNEW.awk item1.log | uniq -c 

感謝您的幫助

菲爾

+0

輸出是否滿足您的要求?如果是這樣,那麼是的,這是unix/linux環境中的「最佳」方法,將數據傳輸到專門程序被認爲是「好東西」。但是這真的是一個非議題Q,所以投票結束爲「基於意見」。請閱讀http://stackoverflow.com/help/how-to-ask,http://stackoverflow.com/help/dont-ask,http://stackoverflow.com/help/mcve並參加[tour]( http://stackoverflow.com/tour)在發佈更多Q​​之前。 祝你好運。 – shellter

+0

住處,感謝您的反饋感謝指導 – Fabby

+0

'gawk'只是'awk'的一個實現。如果你用'awk'來標記你的問題,除了'gawk',你將會有更多的人閱讀它們並且幾乎立即得到多個答案。 –

回答

0

你不需要管道在這裏。你的awk程序中有你需要的一切。

更改您的腳本的末尾部分:

END { 
    print "Detail:" 
    for (id in dest) { 
     print dest[id] 

     group=dest[id];    # group = "123: ABC" 
     sub(/^[0-9]+: */, "", group); # group = "ABC" 
     groupCounter[group]++;  # counter++ 
    } 
    print "Grouped:" 
    for(group in groupCounter) { 
     print group " - " groupCounter[group] 
    } 
} 

如果您不需要的細節部分,只是將其刪除。