2016-02-04 139 views
0

我最近使用awk命令刪除重複的行和行之間的空格,但我沒有得到所需的輸出文件。從文本文件中刪除空行和重複的行

輸入文件:

a b 

a b 

c d 

c d 

e f 

e f 

所需的輸出:(我想刪除重複的線和線之間的所有空格)

a b 
c d 
e f 

我用下面的代碼:

awk '!x[$0]++' input file > output file 

並得到了這個輸出:

a b 

c d 
e f 

第一線和所有其餘部分之間的空間仍然是在輸出文件。 請幫助,謝謝。

+0

您的代碼失敗,因爲在查看第一個空行後,空行只會作爲重複項被刪除。 –

+0

當您在兩者之間有獨特的線條時,是否要刪除重複的線條?我的意思是:當它是輸入文件的最後一行時,是否要刪除一行'a b'? –

回答

2

如果輸入的原始行順序很重要,那麼下面會不會爲你工作。如果您不關心訂單,請繼續閱讀。

對於我來說,AWK是不是這個問題的最佳工具。

既然你要使用awk中,我假設你是在一個類似Unix的環境,所以:

當我聽到「消除空白行」我認爲的「grep」。 當我聽到「消除重複行」,我認爲「uniq」(這需要排序,雖然不是在你的例子中,因爲它已經排序)。

因此,給定一個文件'in.txt'下面產生所需的輸出。

grep -v "^[[:space:]]*$" in.txt | uniq 

現在,如果您的真實數據沒有排序,那將無法工作。相反使用:

grep -v "^[[:space:]]*$" in.txt | sort -u 

您的輸出可能與本例中的輸入順序不同。

4
awk 'NF && !seen[$0]++' inputfile.txt > outputfile.txt 

NF刪除僅包含製表符或空格的白線或線條。

!seen[$0]++刪除重複項。

-2
cat test 

A B

A B

Çd

Çd

電子網

電子網

awk '$0 !~ /^[[:space:]]*$/' test 


A B
A B
C^d
C^d
電子網
電子網

+0

這段代碼可以寫成'awk'NF'test',但它無論如何都不能回答OP的問題。請參閱http://stackoverflow.com/a/35190319/1745001獲取答案。 –