Shell-Script

刪除不在同一行上的重複值

  • July 25, 2019

所以我有一組包含文件名和相關編號的文本。目前它看起來像這樣:

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​​ but not完成sort)並且彼此不相鄰(可以用sortbut not完成uniq)。

誰能給我任何建議?

到目前為止,下面的程式碼並沒有給我我想要的。

sort -t ' ' -k 2n file > file2  
uniq -f 1 file2 > file3 
$ 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

如果您不堅持使用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將其視為分隔符的一部分,而不是第二個欄位的一部分。)

引用自:https://unix.stackexchange.com/questions/531989