2016-07-05 65 views
1

我知道我可以刪除重複的行沒有預先分類,例如:怎麼辦uniq的-d無預分揀(或類似的東西)

awk '!x[$0]++' file 

然而,我的目標是其複製僅打印線只有一次。如果它不是預設問題

sort | uniq -d 

將是完美的。但是這個順序對我來說很重要。有沒有辦法做到這一點與awk,grep或類似的東西?

我正在尋找一個不需要編寫腳本的單線程,如果可能的話。

+0

你是否認爲'排序| uniq -d'不保存順序?它爲我''(GNU coreutils)8.4' – Inian

+1

@Inian我認爲他的意思是說他會使用'uniq -d',如果他不必先排序它。 – lewiatan

+0

@lewiatan到底! – badner

回答

3

只是檢查的x[$0]值:

awk 'x[$0]++ == 1' file.txt 

以上時,它看到第二次將打印一行。

或者前綴++

awk '++x[$0] == 2' file.txt 
2

嘗試從您的awk命令中簡單地刪除!命令。

bash-4.1$ cat /tmp/inp.txt 
abc 
def 
abc 
xyz 
def 
hello 

bash-4.1$ awk 'x[$0]++ == 1' /tmp/inp.txt 
abc 
def 

希望這是你所期望的!

相關問題