2

我想 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
4

3 回答 3

3

好吧,首先,ping在 linux 上限制发送的数据包数-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}',也将修剪您的行。

于 2012-08-09T09:46:17.293 回答
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语句循环遍历每一行并添加Server "$N":到 ping 结果的前面。在开始时$N被初始化为1,并1在每个读取行之后增加
于 2012-08-09T09:46:17.627 回答
1

您可以使用 sed 删除前 4 个空格:

ping google.com -n 10 | grep Minimum | sed s/^\ \ \ \ //
于 2012-08-09T09:57:47.043 回答