识别重复字段并使用 awk 打印它们

识别重复字段并使用 awk 打印它们

我有一个包含多个列的文件,并且想要识别那些重复了特定列值(第 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[]下一次迭代的数组项设置为当前行内容,以供以后比较。

相关内容