我有一个包含不同行的数字文件。其中有很多重复项。我想删除一行重复项,同时保留另一行。
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
对于更复杂的删除操作(例如删除除第二个之外的所有内容多种的重复,同时打印所有非重复的行)我认为您需要处理该文件两次。