如何使用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就是您需要的),那么您可以执行以下操作并处理输入文件两次以打印列所在的行#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

相关内容