Eu tenho um arquivo de log que contém os pings de um determinado site em um arquivo de texto chamado pingoutput.txt
separando cada resposta de ping por linha. Agora preciso extrair deste arquivo de texto o tempo de ida e volta entre time=
e ms
em outro arquivo de texto ou lista que eu possa classificar do menor para o maior.
64 bytes from onofri.org (67.222.36.105): icmp_req=1 ttl=47 time=202 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=2 ttl=47 time=206 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=3 ttl=47 time=215 ms
Além disso, o pingoutput.txt
arquivo é grande e possui cerca de 86.400 linhas. Estou fazendo isso através de um script de shell no Linux.
Responder1
Isso funciona para mim:
sed 's/.*time=\([0-9]*\) .*/\1/' times | sort -n > outfile
Onde times
está esse arquivo:
cat times
64 bytes from onofri.org (67.222.36.105): icmp_req=1 ttl=47 time=202 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=2 ttl=47 time=206 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=3 ttl=47 time=215 ms
E outfile
fica assim:
cat outfile
202
206
215
Responder2
Você também pode usar Perl regex e grep
grep -oP '(?<=time\=).*' pingoutput
Responder3
Você pode extrair o tempo com este script de exemplo:
awk -F\= '{print int($4)}' pingoutput.txt
Ele usa = como delimitador e usa a função int para obter apenas os números da string "202 ms"
Para redirecionar a saída para outro comando de uso de arquivo:
awk -F\= '{print int($4)}' pingoutput.txt > times.txt
Para classificar a saída, você pode canalizar a saída do awk para o comando sort
awk -F\= '{print int($4)}' pingoutput.txt |sort -n > times.txt
Responder4
Se você tiver a pcre
opção comgrep
$ grep -oP 'time=\K\d+' pingout.txt
202
206
215
$ grep -oP 'time=\K\d+' pingout.txt | sort -n
202
206
215
$ grep -oP 'time=\K\d+' pingout.txt | sort -nr
215
206
202
time=\K
olhar positivo para trása stringtime=
- isso não faz parte da saída\d+
um ou mais dígitos, também pode ser usado[^ ]+
para extrair outros caracteres além de espaço
Para salvar a saída em um arquivo, use o >
redirecionamento
$ grep -oP 'time=\K\d+' pingout.txt | sort -n > op.txt
$ cat op.txt
202
206
215