从文本文件中删除空行和重复行

时间:2016-02-04 00:11:17

标签: unix awk

我最近使用awk命令删除重复的行和行之间的空格,但我没有得到所需的输出文件。

输入文件:

root

所需的输出:(我想删除重复的行和行之间的所有空格)

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

第一行和所有其余行之间的空格仍在输出文件中。 请帮助,谢谢。

3 个答案:

答案 0 :(得分:5)

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

NF删除仅包含制表符或空格的白线或线条。

!seen[$0]++删除重复项。

答案 1 :(得分:4)

如果输入的原始行顺序很重要,则以下内容对您不起作用。如果您不关心订单,请继续阅读。

对我来说,awk不是解决这个问题的最佳工具。

由于您尝试使用awk,我假设您处于类似unix的环境中,因此:

当我听到“消除空白行”时,我认为是“grep”。 当我听到“消除重复的行”时,我认为“uniq”(这需要排序,但不是在你的例子中,因为它已经被排序了。)

因此,如果文件'in.txt'复制了您的示例,则以下内容会生成所需的输出。

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

现在,如果您的实际数据未排序,那将无效。而是使用:

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

在这种情况下,您的输出可能与输入的顺序不同。

答案 2 :(得分:-2)

cat test

a b

a b

c d

c d

e f

e f

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


b
a b
c d
c d
e f
e f