我最近使用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
第一行和所有其余行之间的空格仍在输出文件中。 请帮助,谢谢。
答案 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