У меня есть файл журнала, содержащий пинги с определенного веб-сайта в текстовом файле, который называется 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