Adicionar pipe ao uniq
cat file.log | grep "plugin time out" |uniq
Eu tenho um arquivo de log com milhares de linhas. Eu posso filtrar para várias centenas de linhas. A maioria das linhas são repetidas com as mesmas informações e eu gostaria que apenas uma instância dessas linhas repetidas fosse exibida.
cat file.log | grep "plugin time out"
hostA plugin time out
hostA plugin time out
hostA plugin time out
hostB plugin time out
hostB plugin time out
hostC plugin time out
Como obtenho somente esta saída:
hostA plugin time out
hostB plugin time out
hostC plugin time out
Alguns comentários e sugestões
tr 'a-z' 'A-Z' < ip.txt
ou < ip.txt tr 'a-z' 'A-Z'
solução usando awk
$ awk '/plugin time out/ && !seen[$1]++' file.log
hostA plugin time out
hostB plugin time out
hostC plugin time out
/plugin time out/
é como grep
de uso. Filtrar linhas correspondentes a plugin time out
!seen[$1]++
para filtrar somente linhas exclusivas com base na primeira coluna de tais linhas (por padrão awk
divide linhas de entrada em espaços em branco e os campos são acessíveis por $1
, $2
, etc)
seen
é array associativo com o primeiro campo como chaves. O valor padrão no contexto numérico é 0
. Então, !seen[$1]
será verdadeiro apenas para a primeira ocorrência Tags grep text-processing