可以使用 uniq 删除一行重复内容而保留另一行吗?

可以使用 uniq 删除一行重复内容而保留另一行吗?

我有一个包含不同行的数字文件。其中有很多重复项。我想删除一行重复项,同时保留另一行。

uniq -d 删除两行。有没有办法只删除一行而保留第二行相同的行?

答案1

  • 使用以下方式对数字进行排序sort
  • 使用 删除重复项uniq。无需选择。

带有数字和两行空白行的示例:

$ cat unsorted

1
2
3
1
2
3
4
3
2
1

$ sort unsorted


1
1
1
2
2
2
3
3
3
4
$ sort unsorted | uniq

1
2
3
4

答案2

如果你只想输出第一的每行出现次数无需排序,使用awkperl维护哈希(关联数组)

awk '!a[$0]++' file

或者

perl -ne 'print unless $h{$_}++' file

如果你想保留最后的发生,然后做同样的事情,但是向后读取文件并在之后将其反转:

tac file | awk '!a[$0]++' | tac

对于更复杂的删除操作(例如删除除第二个之外的所有内容多种的重复,同时打印所有非重复的行)我认为您需要处理该文件两次。

相关内容