使用awk在Shell中添加值

时间:2016-03-31 15:20:59

标签: shell curl awk

我试图在shell中使用cURL来平均网站的加载时间。我可以使用以下代码将%{time_total}保存到shell中的变量:

result=$(curl -o /dev/null  -s -w "%{time_total}\n" "$url")

在此示例中,$result的值为.013.035.024。我想将它们加在一起,这样我就可以将它们平均化了。我尝试以各种方式使用awk来进行算术购买而我无法得到它。我尝试过这样的事情:

sum=`ps -ef | awk '/port 10 \-/ {print $result+$sum}'`

sum=$(awk 'BEGIN{s=$result+$sum} END {print s}' /dev/null)

sum=$(awk '{print $result+$sum}')

其中每一项都不会以某种方式发挥作用。这是我的完整脚本,它将从cURL输出每个加载时间。任何有助于获得总时间和平均值的帮助都将受到极大的赞赏。

#!/bin/sh

while getopts ":u:c:" opt; do
  case $opt in
    u) url="$OPTARG"
    ;;
    c) count="$OPTARG"
    ;;
    \?) echo "Invalid option -$OPTARG" >&2
    ;;
  esac
done

printf "Load Testing: %s\n" "$url"
echo "-------------------------------------------------------------------------"

declare -i sum=0
for ((i=0; i<count; i++)); do
    result=$(curl -o /dev/null  -s -w "%{time_total}\n" "$url")
    echo "$result"
done

echo "$sum"

2 个答案:

答案 0 :(得分:2)

由于您希望对本质上具有实际价值的值求和,因此您可以将bc -l与简单的echo语句结合使用。

它主要用于执行浮点精度的算术运算。

只需在for循环中添加以下行

即可
sum="$(echo "$result+$sum" | bc -l)"

这会将结果值添加到sum变量中。在此之后,您可以将总和除以得到所需的平均值。

答案 1 :(得分:-1)

想出来,必须用简单的sum存储sum=0的初始值而不是声明它,然后你必须保存和存储值:

sum=$(echo $s | awk "{print (($result+$sum))}")