したがって、ファイル名と関連番号を含むテキストセットがあります。現在は次のとおりです。
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
)行を削除する方法を知りません。完璧な)。誰でも私にアドバイスを与えることができますか?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
ため、期待される出力とは異なります。2番目のフィールドの一部ではなく、区切り文字の一部として扱います。)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
2番目の列に基づいてソート/固有の一意の値のみを生成します。
最初の列のファイル名に基づいて出力を並べ替えるには、次のように並べ替えます。
$ 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