有没有办法在 Unix 中删除文件中的重复行?
我可以使用sort -uanduniq命令来完成,但我想使用sedor awk。
sort -u
uniq
sed
awk
那可能吗?
awk '!seen[$0]++' file.txt
seen是一个关联数组,AWK 会将文件的每一行传递给它。如果一行不在数组中,则seen[$0]计算结果为 false。这!是逻辑 NOT 运算符,会将 false 反转为 true。AWK 将打印表达式计算结果为 true 的行。
seen
seen[$0]
!
++递增,seen以便seen[$0] == 1在第一次找到一行之后,然后seen[$0] == 2,依此类推。AWK 将除0和""(空字符串)之外的所有内容评估为真。如果放置了重复行,seen则!seen[$0]计算结果为 false,并且该行不会被写入输出。
++
seen[$0] == 1
seen[$0] == 2
0
""
!seen[$0]