2017-04-06 42 views
0

我有一個文件(稱爲example.txt中),其看起來如下:擊:不含重複行基於一個柱(兩者各對)

A B C 
D E F 
H I C 
Z B Y 
A B C 
T E F 
W O F 

基於僅第2欄,我想識別具有非唯一條目的所有行並將其完全刪除。我的真實文件可能有重複條目,一式三份條目,四重條目等。我只想保留第2列條目唯一的行。

輸出文件應該是這樣的:

H I C 
W O F 

我最初想做到這一點R中,但我的文件是這麼大,R是過於緩慢和崩潰。所以我想直接在bash中做這個。我是新來打壞,我試過,但它不工作:

arrayTmp=($(cat example.txt | awk '{print $2}' | sort | uniq -d)) 
sed "/${arrayTmp[@]}\/d" example.txt 
+0

唯一的** **重複排ABC,你爲什麼不嘗試重組呢? –

+0

對不起,我現在試着重寫它。我的意思是我想識別列2中具有相同條目的所有行,並基於此刪除所有這些行。我希望更清楚。 – m93

回答

1

如果順序並不重要:

awk '{a[$2]=$0;b[$2]++}END{for (i in b){if(b[i]==1){print a[i]}}}' your_file 
1

假設這些字符僅在第2列的存在,這是通過選擇實現example.txt中不匹配的行,並且不需要數組。

tmp=$(cat example.txt | awk '{print $2}' | sort | uniq -d) 
grep -v -f <(echo -e "$tmp") example.txt 

輸出:

H I C 
W O F