bash 计算连续数据包丢失的脚本

bash script counting consecutive packet loss

我想 ping destination_ip 并将连续丢包的计数重定向到 ping_result.txt 文件。 假设 ping 结果如下:

reply from destination_ip
request timed out
request timed out
reply from destination_ip
request timed out
request timed out
request timed out
request timed out
reply from destination_ip

输出应如下所示:

0
1
2
0
1
2
3
4
0

在 awk 中:

... | awk '/reply/{count = 0} {print count++}' > ping_result.txt

本质上:

  • 如果收到回复,请重置 count
  • 打印 count 并增加它。

甚至没有 答案那么漂亮,但对于那些不太习惯使用 awk 的人来说,我会这样做:

前提是您将连续丢包计数输出保存在文件中 -- output.txt.

COUNT=0
while read line; do
    if [[ $line == "reply"* ]]
        then ((COUNT=0))  
    else ((COUNT++)) 
    fi
    echo $COUNT
done < output.txt > ping_result.txt

因此它遍历文件,找到以 reply 开头的任何行并将该计数设置为 0,否则递增。

我刚刚通读 Why is using a shell loop to process text considered bad practice?。所以这可能不是最好的主意。