我正在嘗試將大量文件傳輸到一系列命令中,這些命令顯示所述文件的給定列中唯一條目的數量。我沒有經驗與外殼,但經過短暫的,而我能想出這樣的:顯示一組文件中唯一列條目數的高性能方法?
awk '{print $5 }' | sort | uniq | wc - l
命令序列工作正常的文件量小,但需要不可接受的時間量執行我的目標集。是否有一組命令可以更高效地完成此操作?
我正在嘗試將大量文件傳輸到一系列命令中,這些命令顯示所述文件的給定列中唯一條目的數量。我沒有經驗與外殼,但經過短暫的,而我能想出這樣的:顯示一組文件中唯一列條目數的高性能方法?
awk '{print $5 }' | sort | uniq | wc - l
命令序列工作正常的文件量小,但需要不可接受的時間量執行我的目標集。是否有一組命令可以更高效地完成此操作?
可以以單次通過的計數值的唯一出現在第五字段AWK:
awk '{if (!seen[$5]++) ++ctr} END {print ctr}'
這將在第五字段中的值的陣列,並且遞增ctr
變量如果值從來沒有前面看過。 END
規則打印計數器的值。
隨着GNU AWK,則可以選擇只檢查到底關聯數組的長度:
awk '{seen[$5]++} END {print length(seen)}'
本傑明已經提供了好油,但是這取決於到底有多少數據被存儲在用awk但是從以前的版本@BenjaminW的不遠處
awk '!_[$5]++' file | wc -l
的sortest和最快的(我可以):陣列,它可以支付來傳遞數據反正廁所。我想快一點(差只能是有趣的很巨大的文件),因爲測試
awk '!E[$5]++{c++}END{print c}' YourFile
作品與所有的awk版本
GNUdatamash
在這個過程中早些時候已經一個計數功能列:
datamash -W count 5
您可以使用'sort -u'而不是'sort | uniq'。 –
關於您實際嘗試處理多少行輸入?你能否包含一點樣本輸入數據,以便我們看到你真正想要做什麼?請在您提供的樣本輸入中包含您的預期輸出。您是否正在尋找EACH文件第5列或所有文件中的獨特項目? – ghoti