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?。所以这可能不是最好的主意。
我想 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
并增加它。
甚至没有
前提是您将连续丢包计数输出保存在文件中 -- 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?。所以这可能不是最好的主意。