重複フィールドを識別し、awkを使用して印刷します。

重複フィールドを識別し、awkを使用して印刷します。

複数の列を含むファイルがあり、特定の列値(列3-6)が繰り返されるファイルを識別したいと思います。

次のコードは重複エントリを見つけましたが、2番目のインスタンスだけでなく両方のインスタンスも表示したいと思います。他の列の値(1、2、7+列)は2つの行間で異なる可能性があるため、両方のインスタンスを確認する必要があります。

awk 'seen[$3, $4, $5, $6]++ == 1' filename

ベストアンサー1

uniqこれに適したツールです。

uniq -D -f2 file

どこ:

  • -D- すべてのコピーを印刷
  • -f2- 最初の2つのフィールドを比較しないでください。

編集する:フィールド7以上を比較しない場合は、次のものが必要ですawk

awk 'n=x[$3,$4,$5,$6]{print n"\n"$0;} {x[$3,$4,$5,$6]=$0;}' file
  • x[]配列項目(列3〜6)を確認してください。すでに設定されている場合は、そのセクションを実行してください{...}。 (同じステートメントでは、n変数は対応する配列項目の値に設定されます。)
  • 括弧内{...}n変数と現在の行を印刷します。$0
  • 次にx[]、後で比較するために、次の反復の配列項目を現在の行の内容に設定します。

おすすめ記事