2016-02-04 98 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获取答案。 –