我有一個日誌文件,其中包含來自某個網站的 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