awkを使用して重複した内容を含む行のみを保存する方法は? [コピー]

awkを使用して重複した内容を含む行のみを保存する方法は? [コピー]

特定の列に重複した情報を含む行を削除する方法はわかっていますが、重複した情報のみを保存する方法はわかりません。

たとえば、

3つの列を含む次のテキスト(kk.txt)があります。

A 3 qs   
A 8 qs  
A 6 st  
B 3 qs  
A 5 qs  
C 9 st  
D 2 st  
C 3 st  

申し込むと、

awk '{if(! a[$1]){print; a[$1]++}}' kk.txt > kk2.txt

それは私に以下を与えます:

A 3 qs  
B 3 qs  
C 9 st  
D 2 st

代わりに、私はその逆を望んでいます。

A 3 qs  
A 8 qs  
A 6 st  
A 5 qs  
C 9 st  
C 3 st  

どんなアイデアがありますか? ? ?

非常にありがとう

ベストアンサー1

D 2 st私が正しく理解したら、最初の列を持つ行を削除したい場合(出力用にこの行がないため、それ以外の場合はsort -u -k2,3 infile必要です)、次のように入力ファイルを処理できます。列のある場所を印刷するには、2回#1が複数回繰り返されます。

awk 'NR==FNR{seen[$1]++; next} seen[$1]>1' infile infile
A 3 qs
A 8 qs
A 6 st
A 5 qs
C 9 st
C 3 st

おすすめ記事