Идентификация повторяющихся полей и печать как с awk

У меня есть файл с несколькими столбцами и вы хотите определить те, где дублируются значения столбца (cols 3-6).

Следующий код находит дубликаты, но я хочу отображать оба экземпляра, а не только второй. Другие значения столбца (cols 1, 2 и 7+) могут быть разными между двумя строками, поэтому мне нужно просмотреть оба экземпляра.

awk 'seen[$3, $4, $5, $6]++ == 1' filename 

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[] для следующей итерации в текущее содержимое строки для последующего сравнения.