我有一个csv文件,有两列

bob,red
bob,red
sam,blue
judy,black
sam,blue
nick,blue
judy,red
sam,blue
nick,red
don,red
judy,blue

在ubuntu中使用bash,我只需要一个过滤器来选择第一列值出现多次但与第二列值的“x”个以上匹配的行。
所以如果“x”=2,结果是
judy,black
judy,red
judy,blue
nick,blue
nick,red

或者如果“x”=3
judy,black
judy,red
judy,blue

最佳答案

如果您想要@choroba提供的输出,而不是您在问题中要求的输出,但不需要所有额外的管道:

awk -F, -v x=3 '!a[$0]++{c[$1]++}END{for(k in c)if(c[k]>=x)print k,c[k]}' file
judy 3

awk -F, -v x=2 '!a[$0]++{c[$1]++}END{for(k in c)if(c[k]>=x)print k,c[k]}' file
judy 3
nick 2

否则,你实际要求的解决方案:
awk -F, -v x=2 '!a[$0]++{c[$1]++;n[$1]?n[$1]=n[$1]"\n"$0:n[$1]=$0}END{for(k in c)if(c[k]>=x)print n[k]}' file
judy,black
judy,red
judy,blue
nick,blue
nick,red

awk -F, -v x=3 '!a[$0]++{c[$1]++;n[$1]?n[$1]=n[$1]"\n"$0:n[$1]=$0}END{for(k in c)if(c[k]>=x)print n[k]}' file
judy,black
judy,red
judy,blue

关于linux - 过滤txt文件中的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15703141/

10-10 14:14