同じ行にない重複値の削除

同じ行にない重複値の削除

したがって、ファイル名と関連番号を含むテキストセットがあります。現在は次のとおりです。

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

重複した2番目の値を持つ行を削除するスクリプトを作成したいと思います。出力は次のとおりです。

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)行を削除する方法を知りません。完璧な)。誰でも私にアドバイスを与えることができますか?uniqsortsortuniq

これまでのところ、以下のコードは私が望むものを提供していません。

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ため、期待される出力とは異なります。2番目のフィールドの一部ではなく、区切り文字の一部として扱います。)RR8.out -1752.138532awk

答え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出力をソートし、-k22番目の列に基づいてソート/固有の一意の値のみを生成します。

最初の列のファイル名に基づいて出力を並べ替えるには、次のように並べ替えます。

$ 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

関連情報