2014-10-08 30 views
0

好日子,BASH,印刷複製,而不排序

我想知道如何只打印中的重複文件的話,不排序。

與awk相反的是:awk '!x[$0]++'。有其他方法嗎?

在此先感謝您的任何線索。

預期輸入

a 
b 
a 
c 
d 
e 
f 
w 
g 
w 
h 

預計輸出

a 
w 

回答

4

如果你看看你的awk語句,你會看到,它否定與!打印條件。只是刪除,它會代替打印副本:

awk 'x[$0]++' 

要只打印一式兩份每一條線,甚至當他們再次出現:

awk 'x[$0]++ == 1' 
0

如果字是在每行1個字(或1句子1 「字」)

uniq -d YourFile 

如果多字

tr " " "\n" YourFile | uniq -d 
+2

'uniq -d'只會產生所需的結果**如果**文件首先被排序__unless__巧合結果在連續的行上。 – potong 2014-10-08 07:40:13

+0

你是對的,我忘了試圖首先使用排序-u所以我的文件被排序。所以現在的問題是:「應該/可以」是以某種方式修改文件。如果不是,在哪個地方必須打印該單詞(訂購第一個或最後一個發生的) – NeronLeVelu 2014-10-08 08:25:54

1

這可能爲你工作(GNU SED):

sed -rn 'G;h;/^(\S+).*\1/P' file 

這將使用反向引用打印當前行(在這種情況下,單個字符)出現在文件中只重複。

sed -rn 'G;h;/^(\S+).*\1/!b;/^(\S+).*\1.*\1/b;P' file 

這使用反向引用打印只有噹噹前行(在此情況下,單個字符)的一個其它出現在文件中出現。