2014-05-15 99 views
0

我有一個像下面的文本文件。從文本文件中刪除行重複的列ubuntu

1 1223 abc 
2 4234 weroi 
0 3234 omsder 
1 1111 abc 
2 6666 weroi 

我想爲列3具有唯一值。所以我想要下面的文件。

1 1223 abc 
2 4234 weroi 
0 3234 omsder 

我可以在Linux中使用一些基本命令嗎?無需使用Java或其他東西。

回答

1

你可以用一些awk腳本來做到這一點。下面是一段代碼,我想出瞭解決問題的方法:

awk 'BEGIN {col=3; sep=" "; forbidden=sep} {if (match(forbidden, sep $col sep) == 0) {forbidden=forbidden $col sep; print $0}}' input.file 

BEGIN關鍵字聲明forbidden字符串,它是用來監視3列的值。然後,match關鍵字檢查當前行的第3列是否包含任何forbidden值。如果不是,則將該列的內容添加到forbidden列表並打印整行。

這裏,sep=" "實例化分隔符。我們在每個forbidden值之間使用sep以避免通過將幾個值彼此相鄰而創建的單詞。例如:

1 1111 ta 
2 2222 to 
3 3333 t 
4 4444 tato 

在這種情況下,不使用隔離,ttato將被視爲forbidden值。我們使用「」作爲分隔符,因爲默認情況下使用「」來分隔每列,因此列名稱中不能包含空格。

請注意,如果您想要更改需要刪除重複的列的編號,只需將col=3與您需要的列編號相匹配(整行爲0,第一列爲1,第二列爲2)第二,...)

+0

感謝您的輸入,但對於我上面的文件,它不會刪除重複項。我得到了我的文件的下面的輸出。 '1 1223 abc, 2 4234 weroi, 0 3234 omsder, 1 1111 abc'。這裏'1 1111 abc'也應該刪除。 – KillBill

+0

@KillBill我相信你犯了一個錯誤複製我的代碼:)你必須寫'BEGIN {forbidden =「」}':'forbidden'必須用你的分隔符(在這種情況下是一個空的空格)初始化,否則第一個行將永遠不匹配(因爲我們在禁止的字符串中查找**「」$ 3「」**模式) – Aserre