如何從文字檔案中提取 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

相關內容