我想ping一堆位置但不能同时ping它们,以便它们不会超时。
输入例如是:ping google.com -n 10 | grep Minimum >> output.txt
这将输出:Minimum = 29ms, Maximum = 46ms, Average = 33ms
但前面有额外的空格,我不知道如何切断,当它输出到txt文件时,它不会转到新行。我要做的是这样做,这样我就可以复制并粘贴输入并在前一个完成后ping一堆地方并将其记录在.txt文件中并对它们进行编号,使其看起来像:
Server 1: Minimum = 29ms, Maximum = 46ms, Average = 33ms
Server 2: Minimum = 29ms, Maximum = 46ms, Average = 33ms
Server 3: Minimum = 29ms, Maximum = 46ms, Average = 33ms
Server 4: Minimum = 29ms, Maximum = 46ms, Average = 33ms
答案 0 :(得分:2)
首先,Linux上的ping
限制了要使用-c
而不是-n
发送的数据包编号。
其次,ping
的输出不是Minimum = xx ms, Maximum = yy ms, Avrage = zz ms
,而是rtt min/avg/max/mdev = 5.953/5.970/5.987/0.017 ms
所以基本上如果你做的事情是:
for server in google.com yahoo.com
do
rtt=`ping $server -c 2 | grep rtt`
echo "$server: $rtt" >> output.txt
done
你应该达到你想要的目标。
[编辑]
如果cygwin是你的平台,剥离空格的最简单方法就是人们所建议的,sed
,或者只是| awk '{print $1}'
,也会修剪你的线。
答案 1 :(得分:1)
我认为您可以使用sed
两次和最后一个while
循环解决此问题:
N=1; ping google.com -n 10 | grep Minimum | sed -r 's/(Average = [[:digit:]]+ms)/\1\n/g' | sed -r s'/[[:space:]]+(Minimum)/\1/g' | while read file; do echo Server "$N": "$file"; N=$((N+1)); done >> output.txt
步骤:
sed
修复了换行问题:
Average = [[:digit:]]+ms
并使用括号将其放入一个组中\1
)并在其后插入换行符(\n
)sed
删除空格,方法是匹配单词Minimum
和前面的所有空格,之后只返回单词Minimum
while
语句循环遍历每一行,并在ping结果前添加Server "$N":
。 $N
在开始时初始化为1
,并在每个读取行后以1
增加答案 2 :(得分:1)
您可以使用sed删除前4个空格:
ping google.com -n 10 | grep Minimum | sed s/^\ \ \ \ //