假设我有一个像这样的文件
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
但这并不是我想做的事情。
答案 0 :(得分:4)
保留排序的一种简单方法是两次运行文件。第一次,记录计数,然后在第二遍打印计数大于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
此处line
存储整行的内容,col
存储第四列,count
与之前相同。