我有一个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/