Obter ou filtrar linhas duplicadas por coluna

2

Eu tenho um arquivo com três colunas e gostaria de obter linhas duplicadas pela terceira coluna, por exemplo:

AAA = 342  
BLABLABLA = 2  
BBBx2 = 23  
1+1 = 2  
KOKOKO= 5  
2x1 = 2  

A saída deve ser:

BLABLABLA = 2  
1+1 = 2  
2x1 = 2  

Eu tentei com sort e uniq, mas ele apaga as linhas repetidas e eu quero imprimi-las.

    
por Gea Planet 21.05.2015 / 08:09

3 respostas

4

Contanto que você tenha interesse na coluna último , é possível fazer isso com sort e uniq :

$ sort -k3n test.txt |  uniq  -f2 -D
1+1 = 2
2x1 = 2
BLABLABLA = 2

Aqui, a opção de classificação -k3n faz com que o arquivo seja classificado a partir do terceiro campo, em ordem numérica; as opções para uniq são:

-f2   Skip the first two fields before checking for uniqueness
-D    Print all the repeated lines

Infelizmente, você não pode controlar o número de campos a serem verificados quanto à exclusividade. Você pode usar -w para especificar um número de caracteres a serem verificados, mas isso só ajudará se o campo de seu interesse for de largura fixa.

Além disso, tenha cuidado com o espaço em branco à direita. Ele será incluído no texto a ser verificado quanto à exclusividade.

    
por 21.05.2015 / 08:34
1

Use o Uniq.

uniq -f 3 <file name>
    
por 21.05.2015 / 08:29
0

A resposta do @rici está correta, mas observe que -D é uma extensão do GNU

Aqui está uma solução awk. Ele é executado em uma única passagem, mas armazena a linha anterior:

sort -k3n <file name> | awk 'a[$3]++{ if(a[$3]==2){ print b }; print $0}; {b=$0}'
    
por 10.07.2017 / 19:07