如何选择包含至少5个相同模式的列(而不是行)

时间:2018-01-24 20:14:13

标签: bash awk

如何选择包含至少5个相同模式的列(不是行)?

我的意思是,并选择3个字符'a'

的列
a dog c d 
a dog c d
1 dog dog 4
a a   dog a 
z z   dog z

并将ouptut作为完整列,如

dog c
dog c
dog dog
a   dog
z   dog

如果您愿意,我正在寻找垂直版本的grep命令... :) 我试图解决awk但没有成功

模式可以在任何列上的任何行 我想打印出至少有3个相似模式的完整列

这里以两列为例,但它们可以是2cd&第3列以及第21列和第102列...

1 个答案:

答案 0 :(得分:1)

awk救援!

$ awk -v v='a' -v n=3 'NR==FNR {for(i=1;i<=NF;i++) if($i==v) c[i]++; next} 
                               {for(i=1;i<=NF;i++) 
                                  if(c[i]>=n) printf "%s", $i OFS; 
                                  print ""}' file{,}

a
a
1
a
z

指定值和计数;双重扫描文件计算出现次数并打印满足条件的列。