识别重复字段并使用 awk 打印两者

Bob*_*Bob 3 bash duplicate awk shell-script

我有一个包含多列的文件,并想确定那些特定列值(第 3-6 列)已重复的文件。

以下代码查找重复项,但我想显示两个实例,而不仅仅是第二个。其他列值(cols 1、2 和 7+)在 2 行之间可能不同,因此我需要查看两个实例。

awk 'seen[$3, $4, $5, $6]++ == 1' filename
Run Code Online (Sandbox Code Playgroud)

cha*_*aos 8

uniq 是正确的工具:

uniq -D -f2 file
Run Code Online (Sandbox Code Playgroud)

在哪里:

  • -D - 打印所有重复项
  • -f2 - 避免比较前 2 个字段

编辑:如果不比较字段 7 及以上,则需要awk

awk 'n=x[$3,$4,$5,$6]{print n"\n"$0;} {x[$3,$4,$5,$6]=$0;}' file
Run Code Online (Sandbox Code Playgroud)
  • x[]检查数组项(第 3-6 列)。如果已经设置,则运行该部分{...}(在同一语句中,n变量被设置为该数组项的值)
  • 在括号中{...}:打印n变量和当前行$0
  • 然后我们将x[]下一次迭代的数组项设置为当前行内容,以供以后比较。