Às vezes, preciso verificar alguns logs e faço isso com este comando:
egrep -o "success|error|fail" <filename> | sort | uniq -c
Entrada de amostra:
test error on line 10
test connect success
test insert success
test started at 00:00
test delete fail
Saída de amostra:
1 error
1 fail
2 success
Gostaria de saber se alguém sabe como fazer isso com um comando mais curto?
Antes de você perguntar por que eu gostaria de fazer isso com um comando diferente ... Sem motivo especial, só estou curioso :)
command-line
grep
alternative
Wolfy
fonte
fonte
Não é muito mais curto, mas como você realmente não precisa da expressão regular, há
fgrep
(grep -F
).outra maneira de escrever a mesma coisa no bash:
fonte
Você pode escrever um script simples do bash e depois chamá-lo, como:
e salve-o como (por exemplo)
myscript.sh
. Então faça umchmod +x myscript.sh
e você pode chamar assimmyscript.sh <filename>
.fonte
Seu comando, embora curto e gentil, é uma maneira bastante tortuosa de contar ocorrências de um termo. Eu provavelmente adotaria a abordagem direta e direta e usaria a flag -c do grep (que faz exatamente isso) dentro de um loop de shell:
Não é tão curto, nem tão emocionante, potencialmente mais rápido para arquivos de log grandes (não
sort
). Eu diria que é uma lavagem.fonte
Esta poderia ser uma resposta fictícia, mas acho que, neste caso,
sort
é bastante inútil; talvez você possa omiti-lo. No entanto, aqui estamos usando três comandos diferentes para três ações diferentes.Podemos encurtar se alguns deles forem alcançados com alguma opção de
grep
, mas não vejo qual ... :)fonte
2 success 1 fail 1 success
.