すべての行の2番目のフィールドに同じ最初のフィールドの値がある場合

すべての行の2番目のフィールドに同じ最初のフィールドの値がある場合

スペースで区切られた2つの列を持つファイルがあります。 2番目の列にはTorの1つだけがありますF。最初の列の文字を読みたいです。たとえば、A2 番目の列に同じ文字の 3 行がある場合は保持されますが、2 番目の列に混合文字がある場合は削除されます。TABD

A T
A T
A T
B T
B T
B F
C F
C F
D F
D T
D F

2番目のフィールドに同じ最初のフィールドのすべての行に値がある場合は、印刷したいと思います。予想出力:

A T
A T
A T
C F
C F

たぶんawkそれは可能ですか?助けてくれてありがとう!

ベストアンサー1

1つの方法は次のとおりですawk

awk 'NR==FNR{if (x[$1]++){if ($2!=t){z[$1]++}} else {t=$2};
next}!($1 in z)' infile infile

このプロセスはファイルを2回処理します。最初のパスでは、最初のフィールドが同じ値の場合、2番目のフィールドの値が異なることを確認します。その$1場合は配列インデックスとして使用され、2番目のパスは次の場合にのみバッチを印刷します。最初のフィールドはそのフィールドのインデックスではありません。または、次のように
使用しても大丈夫なら:sortawk

sort -u infile | awk 'NR==FNR{seen[$1]++;next}seen[$1]==1' - infile

sort -uファイルから重複した行を削除し、結果をパイプしてawk最初のフィールドの発生回数を計算し、ファイル全体を再処理し、数があれば行を印刷します1

おすすめ記事