如何从文本文件中提取 ping 时间并将其排序到另一个文本文件/列表中

如何从文本文件中提取 ping 时间并将其排序到另一个文本文件/列表中

我有一个日志文件,其中包含来自某个网​​站的 ping,该文本文件称为pingoutput.txt按行分隔每个 ping 回复。现在,我需要从这个文本文件中提取其间的往返时间,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 上通过 shell 脚本执行此操作。

答案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 ms”字符串的数量

要将输出重定向到其他文件,请使用命令:

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

相关内容