2012-10-18 28 views
4

我知道一些bash,但我正在面臨一個過濾文件的問題。根據列3中的值過濾文本文件以獲取唯一條目

考慮如下內容(文件1)的文本文件:我將用一個例子解釋

10.10.12 bib24 Avenger goodone 
10.10.12 bib21 The_Dark_Knight_Rises betterone 
10.10.12 bib53 Avenger goodone 
10.10.12 bib35 Ice_Age wow 
11.10.12 bib53 TheAmazingSpiderMan nice 
11.10.12 bib54 TheAmazingSpiderMan nice 
11.10.12 bib01 Avenger goodone 
12.10.12 bib29 Avenger goodone 
12.10.12 bib11 TheAmazingSpiderMan nice 
12.10.12 bib03 Ice_Age wow 
12.10.12 bib98 Ice_Age wow 
14.10.12 bib12 Ice_Age wow 

這是結果,我想(文件2):

10.10.12 bib24 Avenger goodone 
10.10.12 bib21 The_Dark_Knight_Rises betterone 
10.10.12 bib35 Ice_Age wow 
11.10.12 bib53 TheAmazingSpiderMan nice 

所以我的問題是:我使用哪個命令來獲得這個結果(file2)? (即電影的首次錄入,而不考慮列/場1,2和4)。

我希望它很清楚。

+0

但「復仇者goodone」有5次?! oO –

+2

是的,那是什麼?看到它在不同的時間與不同的圍脖 – minutemaid

+0

對不起,法國青蛙有時比以英語作爲母語的人更容易理解 –

回答

5

下面是使用awk一個辦法:

awk '!a[$3]++' file.txt 

結果:

10.10.12 bib24 Avenger goodone 
10.10.12 bib21 The_Dark_Knight_Rises betterone 
10.10.12 bib35 Ice_Age wow 
11.10.12 bib53 TheAmazingSpiderMan nice 
+0

它對我有用。我現在仍然需要處理更多的測試 – minutemaid

+1

非常感謝! – minutemaid

4

嘗試做的是:

sort -u -k3 file.txt 

輸出

10.10.12 bib24 Avenger goodone 
10.10.12 bib35 Ice_Age wow 
11.10.12 bib53 TheAmazingSpiderMan nice 
10.10.12 bib21 The_Dark_Knight_Rises betterone 
+1

+1,比我的回答好 –

+0

這不起作用,我仍然有一些電影相同的線。 – minutemaid

+0

增加了輸出,它對我來說是一種魅力。切(GNU coreutils)8.19 –

0

拉斯蒂csh用戶:

使用此:

awk '{c[$3]++} {if (c[$3] == 1) print $0}' file.txt 

因爲與原來的答案,將錯誤 「事件未找到」(也可以讓普通的字符 「!」!但這是更容易閱讀和使用)

相關問題