取ping测试平均变化输出

时间:2014-12-22 18:30:17

标签: bash awk

这是我想要更改第二个输出的脚本:

#!/bin/bash    

declare -a arr=("8.8.8.8" "8.8.4.4" "192.168.1.28")    
x=0    
DATE=`date +%Y-%m-%d:%H:%M:%S`     

echo $DATE > denemesh.txt

while [ $x -le 2 ]    
do    
    echo "  ${arr[x]}" >> denemesh.txt    
    ping -c 4 ${arr[x]} | tail -1| awk ' {print $4  }' | cut -d '/' -f 2 >> denemesh.txt
    x=$(( $x + 1 ))    
done

目前,输出如下:

2014-12-22:20:22:37    
  8.8.8.8    
18.431    
  8.8.4.4    
17.758    
  192.168.1.28    
0.058

是否可以改为输出而不是这样?

2014-12-22:20:22:37    
  8.8.8.8          18.431    
  8.8.4.4          17.758    
  192.168.1.28      0.058

2 个答案:

答案 0 :(得分:1)

你真的需要修改一行:

echo -n "  ${arr[x]}" >> denemesh.txt    

使用-n标志会抑制尾随换行符,因此您的下一个语句应附加到当前行。然后,您可以根据需要调整格式。

答案 1 :(得分:1)

当然可以。尝试这样的事情:

declare -a arr=("8.8.8.8" "8.8.4.4" "192.168.1.28")    
d=$(date +%Y-%m-%d:%H:%M:%S)

echo "$d" > denemesh.txt

for ip in "${arr[@]}"
do    
    printf '  %-12s' "$ip"
    ping -c 4 "$ip" | awk 'END{split($4,a,"/"); printf "%12s\n", a[2]}'
done >> denemesh.txt

我使用printf格式说明符来对齐输出。 %-12s左对齐第一列,固定宽度为12个字符,awk中的%12s右对齐第二列。我没有使用while循环,而是删除了变量x并直接循环遍历数组中的值。我还在脚本中更改了旧式的反引号语法,而不是使用$( )。 awk能够直接获取输出,所以我删除了你的尾巴和切割的使用。最后,您可以简单地重定向循环的输出,而不是将>>放在每一行的末尾。