Shell-Script
刪除不在同一行上的重複值
所以我有一組包含文件名和相關編號的文本。目前它看起來像這樣:
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 -u
並uniq
用於此,但我不知道如何刪除不完全相同的行(可以用uniq
but not完成sort
)並且彼此不相鄰(可以用sort
but 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
將其視為分隔符的一部分,而不是第二個欄位的一部分。)