删除不在同一行的重复值

删除不在同一行的重复值

所以我有一组文本,其中包含文件名和关联的编号。目前它看起来像这样:

RR0.out -1752.142111    
RR1.out -1752.141887    
RR2.out -1752.142111    
RR3.out -1752.140319    
RR4.out -1752.140564    
RR5.out -1752.138532    
RR6.out -1752.138493    
RR7.out -1752.138493    
RR8.out -1752.138532

我想编写一个脚本来删除具有重复第二个值的行。这样输出将是:

RR0.out -1752.142111    
RR1.out -1752.141887    
RR3.out -1752.140319    
RR4.out -1752.140564    
RR5.out -1752.138532    
RR6.out -1752.138493    
RR8.out -1752.138532    

我已经看到了两者sort -uuniq用于此目的,但我无法弄清楚如何删除不完全相同的行(可以使用uniq但不可以完成sort)并且彼此不相邻(可以使用sort但不能完成uniq)。
有人可以给我任何建议吗?

到目前为止,下面的代码没有给我我想要的。

sort -t ' ' -k 2n file > file2  
uniq -f 1 file2 > file3 

答案1

如果您不坚持使用sort/uniq那么:

$ awk '!seen[$2]++' file
RR0.out -1752.142111    
RR1.out -1752.141887    
RR3.out -1752.140319    
RR4.out -1752.140564    
RR5.out -1752.138532    
RR6.out -1752.138493    

(它与您的预期输出不同RR5.out -1752.138532,因为RR8.out -1752.138532仅尾随空格不同;awk将其视为分隔符的一部分,而不是第二个字段的一部分。)

答案2

$ sort -uk2 file
RR6.out -1752.138493
RR8.out -1752.138532
RR5.out -1752.138532
RR3.out -1752.140319
RR4.out -1752.140564
RR1.out -1752.141887
RR0.out -1752.142111

sort -u对输出进行排序并仅生成唯一值,-k2将根据第二列进行排序/唯一。

为了根据第一列中的文件名对输出重新排序,您可以将其重新排序:

$ sort -uk2 file | sort -k1
RR0.out -1752.142111
RR1.out -1752.141887
RR3.out -1752.140319
RR4.out -1752.140564
RR5.out -1752.138532
RR6.out -1752.138493
RR8.out -1752.138532

相关内容