Como extrair e classificar os tempos de ping de um arquivo de texto para outro arquivo/lista de texto

Como extrair e classificar os tempos de ping de um arquivo de texto para outro arquivo/lista de texto

Eu tenho um arquivo de log que contém os pings de um determinado site em um arquivo de texto chamado pingoutput.txtseparando cada resposta de ping por linha. Agora preciso extrair deste arquivo de texto o tempo de ida e volta entre time=e msem 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.txtarquivo é 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 timesestá 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 outfilefica 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 pcreopçã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 string time=- 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

informação relacionada