2017-04-05 33 views
0

我正在嘗試將大量文件傳輸到一系列命令中,這些命令顯示所述文件的給定列中唯一條目的數量。我沒有經驗與外殼,但經過短暫的,而我能想出這樣的:顯示一組文件中唯一列條目數的高性能方法?

awk '{print $5 }' | sort | uniq | wc - l 

命令序列工作正常的文件量小,但需要不可接受的時間量執行我的目標集。是否有一組命令可以更高效地完成此操作?

+0

您可以使用'sort -u'而不是'sort | uniq'。 –

+0

關於您實際嘗試處理多少行輸入?你能否包含一點樣本輸入數據,以便我們看到你真正想要做什麼?請在您提供的樣本輸入中包含您的預期輸出。您是否正在尋找EACH文件第5列或所有文件中的獨特項目? – ghoti

回答

1

可以以單次通過的計數值的唯一出現在第五字段AWK:

awk '{if (!seen[$5]++) ++ctr} END {print ctr}' 

這將在第五字段中的值的陣列,並且遞增ctr變量如果值從來沒有前面看過。 END規則打印計數器的值。

隨着GNU AWK,則可以選擇只檢查到底關聯數組的長度:

awk '{seen[$5]++} END {print length(seen)}' 
1

本傑明已經提供了好油,但是這取決於到底有多少數據被存儲在用awk但是從以前的版本@BenjaminW的不遠處

awk '!_[$5]++' file | wc -l 
1

的sortest和最快的(我可以):陣列,它可以支付來傳遞數據反正廁所。我想快一點(差只能是有趣的很巨大的文件),因爲測試

awk '!E[$5]++{c++}END{print c}' YourFile 

作品與所有的awk版本

0

GNUdatamash在這個過程中早些時候已經一個計數功能列:

datamash -W count 5