Tengo un archivo de registro que contiene los pings de un determinado sitio web en un archivo de texto llamado pingoutput.txt
separació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 ms
en 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.txt
archivo 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 times
está 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 outfile
se 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 pcre
opció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 cadenatime=
- 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