Cómo extraer y ordenar tiempos de ping de un archivo de texto a otro archivo/lista de texto

Cómo extraer y ordenar tiempos de ping de un archivo de texto a otro archivo/lista de texto

Tengo un archivo de registro que contiene los pings de un determinado sitio web en un archivo de texto llamado pingoutput.txtseparación de cada respuesta de ping por línea. Ahora necesito extraer de este archivo de texto el tiempo de ida y vuelta entre medio time=y msen otro archivo de texto o lista que luego podría ordenar de menor a mayor.

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

Además, el pingoutput.txtarchivo es grande y tiene alrededor de 86400 líneas. Estoy haciendo esto a través de un script de shell en Linux.

Respuesta1

Esto funciona para mí:

sed 's/.*time=\([0-9]*\) .*/\1/' times | sort -n > outfile

¿Dónde timesestá este archivo?

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

Y outfilese parece a esto:

cat outfile 
202
206
215

Respuesta2

También puedes usar Perl regex y grep

grep -oP '(?<=time\=).*' pingoutput 

Respuesta3

Puede extraer la hora con este script de muestra:

awk -F\= '{print int($4)}' pingoutput.txt 

Utiliza = como delimitador y usa la función int para obtener solo los números de la cadena "202 ms"

Para redirigir la salida a otro archivo use el comando:

awk -F\= '{print int($4)}' pingoutput.txt > times.txt

Para ordenar la salida, puede canalizar la salida de awk al comando ordenar

awk -F\= '{print int($4)}' pingoutput.txt |sort -n > times.txt

Respuesta4

Si tienes la pcreopción congrep

$ 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 mirada hacia atrás positivala cadena time=- esto no es parte de la salida
  • \d+uno o más dígitos, también se puede utilizar [^ ]+para extraer caracteres distintos del espacio

Para guardar la salida en un archivo, utilice la >redirección

$ grep -oP 'time=\K\d+' pingout.txt | sort -n > op.txt
$ cat op.txt 
202
206
215

información relacionada