linux – 在特定列中查找具有公共值的行

假设我有这样的文件

5  kata 45 buu
34 tuy  3  rre
21 ppo  90 ty
21 ret  60 buu
09 ret  89 ty
21 plk  1  uio
23 kata 90 ty

我想在输出中仅包含第4列中包含重复值的行.因此,我想要的输出将是这一个:

5  kata 45 buu
21 ppo  90 ty
21 ret  60 buu
09 ret  89 ty
23 kata 90 ty

我该如何执行此任务?

我可以识别并隔离我感兴趣的列:

awk -F"," '{print $4}' file1 > file1_temp

然后检查是否有重复的值以及有多少:

awk '{dups[$1]++} END{for (num in dups) {print num,dups[num]}}' file1_temp

但这并不是我想要做的……

解决方法:

保留排序的一种简单方法是两次运行文件.第一次,记录计数,然后在第二遍打印计数大于1的那些:

awk 'NR == FNR { ++count[$4]; next } count[$4] > 1' file file

如果您不想两次遍历文件,可以跟踪几个数组中的内容并在END块中进行打印:

 awk '{ line[NR] = $0; col[NR] = $4; ++count[$4] } 
  END { for (i = 1; i <= NR; ++i) if (count[col[i]] > 1) print line[i] }' file

这里行存储整行的内容,col存储第四列,count与以前相同.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...