2013-04-03 18 views
4

有沒有辦法通過命令行工具過濾掉文件中的所有獨特行而不排序行?我想實質上做到這一點:如何過濾文件中的所有獨特行?

sort -u myFile 

沒有性能擊中排序。

+0

漸近地,重複刪除的下限是O(nlogn)。 – gongzhitaao 2013-04-03 20:36:08

+2

@ gongzhitaao:只限於恆定的空間。散列表的使用允許您以O(n)空間爲代價去除O(n)時間內的重複項。 – chepner 2013-04-03 20:54:15

+0

@chepner是的:) – gongzhitaao 2013-04-03 21:01:58

回答

16

刪除重複的線路:

awk '!a[$0]++' file 

這就是著名的AWK需要一行代碼。關於inet有很多解釋。 Here是一個解釋:

這一行是非常習慣。它記錄了 關聯數組「a」(數組總是在Awk中關聯)和 中看到的行,同時測試它是否已經看到過該行。如果之前看過 一行,那麼[line]> 0和!a [line] == 0。 評估爲false的任何表達式都是空操作,且任何表達式的真值爲 等於「{print}」。

+3

經典的解決方案,你應該解釋它是如何工作的,但是;} – tink 2013-04-03 20:34:04

+0

「解釋」補充說。 :) – Kent 2013-04-03 21:49:10

+0

確實,這是光榮的!提醒我我應該學習'awk'。 – xdhmoore 2013-04-03 21:49:54

相關問題