2016-03-31 10 views
0

シェルでcURLを使用してウェブサイトの読み込み時間を平均化しようとしています。 $result.013.035、および.024のような値を持って、この例ではawkでシェルに値を追加

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

:私は、次のコードを使用して、シェル内の変数に%{time_total}を保存することができています。これらをまとめて、平均化できるようにしたいと思います。私は算術的な購入をするために様々な方法で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から各読み込み時間を出力する私の完全なスクリプトです。合計時間と平均を得るための助けがあれば、大いに感謝します。あなたがしたいので

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

標準の 'sh'構文でないsum = $(echo" $ result + $ sum "| bc) – sigmalha

+0

については、' bash'でも動作します。 – isedev

答えて

-1

は、それを考え出した代わりにそれを宣言するシンプルなsum=0sumの初期値を格納する必要があり、その後、あなたが値を保存し、保存しなければなりません実際の値である合計値は、bc -lを単純なエコーステートメントで使用することができます。

基本的に浮動小数点精度の算術演算を行うために使用されます。

単にこれは、合計変数に結果値を追加しますforループ

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

に以下の行を追加します。この後、必要な平均値を得るために合計を除算することができます。

+0

なぜ '$ s'をawkにパイプしていますか? – hek2mgl

+0

これは非常に不器用な "解決策"です。そうしないと、変数のさまざまな値、実行中のディレクトリの内容などを指定して、あらゆる種類の問題を表示しています。これを削除してからdownvotesを累積します。 –

+0

@エドモートンそれは働くための良い方法は? – Jeremy1026

2

#!/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" 
+1

平均計算を明示的にすることもできます: 'avg =" $(echo "$ sum/$ count" | bc -l) "'カウントがゼロでないことを確認するか、/がある場合は計算をスキップしてください。 –

関連する問題