行を特定の回数だけ繰り返す[繰り返し]

行を特定の回数だけ繰り返す[繰り返し]

複数の列を含むファイルがあり、列3の値が繰り返される行を識別しました。

入力例:

A B C
1 2 APPLE
3 4 PEAR
9 3 LEMON
8 3 ORANGE
8 2 APPLE
3 4 APPLE
9 3 LEMON
8 3 PEAR

以下を使用して、3列の単語がどれだけ頻繁に繰り返されるかを計算できます。

awk '{print $3}' [input filename] | sort | uniq -c > [output filename]

出力:

3 APPLE
2 PEAR
2 LEMON
1 ORANGE

私が望むのは、3回繰り返される行を維持することです。

希望の出力:

APPLE

または

1 2 APPLE
8 2 APPLE
3 4 APPLE

すべての列が元の入力ファイルから印刷されるのか、3番目の列値のみが印刷されるのかは重要ではありません。

を使用すると、sort -u少なくとも1回発生するすべての行が印刷されますが、これは私が望むものではありません。

ベストアンサー1

もう一つの方法は、ファイルを2回チェックすることです。まず、参照を作成し、2番目に必要に応じてフィルタリングします。

$ awk 'NR==FNR{a[$3]++; next} a[$3]==3' ip.txt ip.txt 
1 2 APPLE
8 2 APPLE
3 4 APPLE

$ awk 'NR==FNR{a[$3]++; next} a[$3]==2' ip.txt ip.txt 
3 4 PEAR
9 3 LEMON
9 3 LEMON
8 3 PEAR

$ awk 'NR==FNR{a[$3]++; next} a[$3]<2' ip.txt ip.txt 
A B C
8 3 ORANGE

おすすめ記事