![可以使用 uniq 删除一行重复内容而保留另一行吗?](https://linux22.com/image/1008949/%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20uniq%20%E5%88%A0%E9%99%A4%E4%B8%80%E8%A1%8C%E9%87%8D%E5%A4%8D%E5%86%85%E5%AE%B9%E8%80%8C%E4%BF%9D%E7%95%99%E5%8F%A6%E4%B8%80%E8%A1%8C%E5%90%97%EF%BC%9F.png)
我有一个包含不同行的数字文件。其中有很多重复项。我想删除一行重复项,同时保留另一行。
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
如果你只想输出第一的每行出现次数无需排序,使用awk
或perl
维护哈希(关联数组)
awk '!a[$0]++' file
或者
perl -ne 'print unless $h{$_}++' file
如果你想保留最后的发生,然后做同样的事情,但是向后读取文件并在之后将其反转:
tac file | awk '!a[$0]++' | tac
对于更复杂的删除操作(例如删除除第二个之外的所有内容多种的重复,同时打印所有非重复的行)我认为您需要处理该文件两次。