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或其他東西。
我有一個像下面的文本文件。從文本文件中刪除行重複的列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或其他東西。
你可以用一些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
在這種情況下,不使用隔離,t
和tato
將被視爲forbidden
值。我們使用「」作爲分隔符,因爲默認情況下使用「」來分隔每列,因此列名稱中不能包含空格。
請注意,如果您想要更改需要刪除重複的列的編號,只需將col=3
與您需要的列編號相匹配(整行爲0,第一列爲1,第二列爲2)第二,...)
感謝您的輸入,但對於我上面的文件,它不會刪除重複項。我得到了我的文件的下面的輸出。 '1 1223 abc, 2 4234 weroi, 0 3234 omsder, 1 1111 abc'。這裏'1 1111 abc'也應該刪除。 – KillBill
@KillBill我相信你犯了一個錯誤複製我的代碼:)你必須寫'BEGIN {forbidden =「」}':'forbidden'必須用你的分隔符(在這種情況下是一個空的空格)初始化,否則第一個行將永遠不匹配(因爲我們在禁止的字符串中查找**「」$ 3「」**模式) – Aserre