Identificando campos duplicados e imprimindo ambos com awk

2

Eu tenho um arquivo com várias colunas e quero identificar aquelas em que valores de coluna específicos (cols 3-6) foram duplicados.

O código a seguir encontra as duplicatas, mas quero exibir ambas as instâncias, não apenas a segunda. Os outros valores da coluna (cols 1, 2 e 7+) podem ser diferentes entre as duas linhas, portanto, é necessário que eu veja ambas as instâncias.

awk 'seen[$3, $4, $5, $6]++ == 1' filename
    
por Bob 25.08.2015 / 18:52

1 resposta

5

uniq é a ferramenta correta para isso:

uniq -D -f2 file

Onde:

  • -D - imprime todas as duplicatas
  • -f2 - evite comparar os dois primeiros campos

Editar: Se os campos 7 e acima não forem comparados, você precisará de awk :

awk 'n=x[$3,$4,$5,$6]{print n"\n"$0;} {x[$3,$4,$5,$6]=$0;}' file
  • O item da matriz x[] (colunas 3-6) está marcado. Se já estiver definido, execute a peça em {...} (na mesma instrução, a variável n está definida para o valor desse item de matriz)
  • Entre parênteses {...} : A variável n e a linha atual $0 são impressas.
  • Em seguida, definimos o item da matriz x[] para a próxima iteração para o conteúdo da linha atual, para posterior comparação.
por 25.08.2015 / 18:59