Как извлечь и отсортировать время пинга из текстового файла в другой текстовый файл/список

Как извлечь и отсортировать время пинга из текстового файла в другой текстовый файл/список

У меня есть файл журнала, содержащий пинги с определенного веб-сайта в текстовом файле, который называется pingoutput.txtразделение каждого ответа пинга по строкам. Теперь мне нужно извлечь из этого текстового файла время на передачу туда и обратно между ними time=и msв другой текстовый файл или список, который я затем мог бы отсортировать от наименьшего к наибольшему.

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

Также pingoutput.txtфайл большой и содержит около 86400 строк. Я делаю это через скрипт оболочки на Linux.

решение1

Мне это подходит:

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

Где timesнаходится этот файл:

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

И outfileвыглядит это так:

cat outfile 
202
206
215

решение2

Вы также можете использовать Perl regex и grep

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

решение3

Вы можете извлечь время с помощью этого примера скрипта:

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

Используется = в качестве разделителя и используется функция int для получения только чисел строки «202 мс».

Чтобы перенаправить вывод в другой файл, используйте команду:

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

Для сортировки вывода вы можете передать вывод awk в команду sort.

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

решение4

Если у вас есть pcreвозможность сgrep

$ 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 позитивный взгляд назадстрока time=- это не часть вывода
  • \d+одна или несколько цифр, также можно использовать [^ ]+для извлечения символов, отличных от пробела

Чтобы сохранить вывод в файл, используйте >перенаправление

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

Связанный контент