Usando o grep e procurando por ocorrências únicas [duplicado]

7

Eu tenho um arquivo de texto desse tipo, e gostaria de procurar por qualquer linha que contenha a string Validating Classification e depois obter os erros relatados. Eu não sei os tipos de erros possíveis.

Arquivo de entrada:

201600415 10:40 Error Validating Classification: error1
201600415 10:41 Error Validating Classification: error1
201600415 10:42 Error Validating Classification: error2
201600415 10:43 Error Validating Classification: error3
201600415 10:44 Error Validating Classification: error3

Arquivo de saída

201600415 10:40 Error Validating Classification: error1
201600415 10:42 Error Validating Classification: error2
201600415 10:43 Error Validating Classification: error3

Posso conseguir isso usando grep, pipes e outros comandos?

    
por user3065205 15.04.2016 / 17:51

3 respostas

13

Você precisará descartar os timestamps, mas 'grep' e 'sort --unique' juntos podem fazer isso por você.

grep --only-matching 'Validating Classification.*' | sort --unique

Portanto, grep -o mostrará apenas as partes da linha que correspondem a sua regex (é por isso que você precisa incluir o .* para incluir tudo após a correspondência "Validando Classificação"). Então, depois de ter apenas a lista de erros, você pode usar sort -u para obter apenas a lista exclusiva de erros.

    
por 15.04.2016 / 18:05
5

Você pode usar este comando assumindo seus dados no arquivo test

uniq -f 2 <test
    
por 15.04.2016 / 18:07
1

Eu iria com o awk

awk -F: '{ if (!a[$3]++ ) print ;}' file
  • -F: use: como separador
  • $3 é padrão após :
  • !a[$3]++ garante ser verdadeiro apenas na primeira ocorrência
por 15.04.2016 / 18:07