![识别重复字段并使用 awk 打印它们](https://linux22.com/image/71649/%E8%AF%86%E5%88%AB%E9%87%8D%E5%A4%8D%E5%AD%97%E6%AE%B5%E5%B9%B6%E4%BD%BF%E7%94%A8%20awk%20%E6%89%93%E5%8D%B0%E5%AE%83%E4%BB%AC.png)
我有一个包含多个列的文件,并且想要识别那些重复了特定列值(第 3-6 列)的文件。
以下代码查找重复项,但我想显示两个实例,而不仅仅是第二个实例。两行之间的其他列值(第 1、2 和 7+ 列)可能不同,因此我需要查看两个实例。
awk 'seen[$3, $4, $5, $6]++ == 1' filename
答案1
uniq
是正确的工具:
uniq -D -f2 file
在哪里:
-D
- 打印所有重复项-f2
- 避免比较前两个字段
编辑:如果不比较字段 7 及以上,则需要awk
:
awk 'n=x[$3,$4,$5,$6]{print n"\n"$0;} {x[$3,$4,$5,$6]=$0;}' file
x[]
检查数组项(第 3-6 列)。如果已经设置,则运行该部分{...}
(在同一语句中,n
变量设置为该数组项的值)- 在括号中
{...}
:打印n
变量和当前行。$0
- 然后我们将
x[]
下一次迭代的数组项设置为当前行内容,以供以后比较。