2016-10-25 24 views
0

私はサーバーからデータを収集するために使用されるpythonスクリプトを持っています。分割時間間隔をバッチで

14773895000000000001477389900000000000は間隔を定義するナノ秒単位の時間です
./ApiStreamingClient.py -w flow-index -n admin -p admin localhost 1477389500000000000 1477389900000000000 | gzip - > out.gz 

:私はそれを実行することができます。

サービスが遅いので、サブコードで同じコードを実行するbashスクリプトを作成する必要があります。私はエラーがwhileループが定義されている方法で、私はbatch_startbatch_end変数を更新する方法であると思い

#!/bin/bash 

file_name=$1 
data_type=$2 
username=$3 
password=$4 
address=$5 
start_time=$6 
end_time=$7 

set batch_size = 1000000000 
set batch_start = start_time 
set batch_end = current_time + batch_size 

while (("$batch_end" < "$end_time")) 

do 

    echo "iteration $i batch_start=$batch_start batch_end=$batch_end" 
    ./$file_name -w flow-index -n $username -p $password $address $batch_start $batch_end | gzip > "out 
    set /a batch_start = batch_end + 1 
    set /a batch_end = batch_start + batch_size 
done 
~ 

を:

これが私の現在の試みですが、コンパイル中に多少の誤差があります。

このコードで何が問題なのか教えていただけますか?私の知識は、bashは0に近く、私はスクリプトの作業バージョンと問題の説明をしたいと思います。

Thansk!

EDIT: 私はまだエラーを取得:

#!/bin/bash 

file_name=$1 
data_type=$2 
username=$3 
password=$4 
address=$5 
start_time=$6 
end_time=$7 

batch_size = 1000000000 
batch_start = $start_time 
batch_end = $((current_time + batch_size)) 


while (("$batch_end" < "$end_time$)) 
do 

    echo "iteration $i batch_start=$batch_start batch_end=$batch_end" 
    ./$file_name -w flow-index -n $username -p $password $address $batch_start $batch_end | gzip > "out_$i.gz" 
    batch_start =$((batch_end + 1)) 
    batch_end =$((batch_start + batch_size)) 
done 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
probe27:/data/misC# 
probe27:/data/misC# 
probe27:/data/misC# 
probe27:/data/misC# 
probe27:/data/misC# sh GetStreamingFlowData.sh ApiStreamingClient.py -w flow-index -n admin -p admin localhost 1477389500000000000 1477389900000000000 
GetStreamingFlowData.sh: line 11: batch_size: command not found 
GetStreamingFlowData.sh: line 12: batch_start: command not found 
GetStreamingFlowData.sh: line 13: batch_end: command not found 
GetStreamingFlowData.sh: line 20: unexpected EOF while looking for matching `"' 
GetStreamingFlowData.sh: line 24: syntax error: unexpected end of file 
probe27:/data/misC# 
+0

あなたはこれをpythonで行うと考えましたか? Pythonはより多くの算術に適合し、別の言語をプロセスに追加することを避けるため、より適切です。私は間違っているかもしれませんが、私はあなたが一度もPythonの一行を書いたことがない場合でも、半日でそれをやるために十分に学ぶことができると確信しています – Aaron

+0

それはbashで難しいと思いますか?私はPythonを使用することができないと確信していません – Donbeo

+0

いいえ、それは正しいツールを使用する場合は簡単です、私の答えを参照してください:)問題は長期的に:何かがあなたの解決策で壊れている場合は、 pythonとそれをデバッグするbashを知っているressourceです。また、bashはpythonよりも効率が悪く、1つではなく複数のpythonプロセスを生成するには時間がかかります。 – Aaron

答えて

0

これはseqのための仕事です:

start=1477389500000000000 
end=1477389900000000000 
step=1000000000 

for current_step in $(seq $start $step $end); do 
    echo $current_step 
done 
+0

ありがとう、あなたはまた、Pythonのソリューションを書くことに気をつけますか? – Donbeo

+0

私はしたいと思いますが、私は現在忙しいです、そして、私は分でそれを行うことができるPythonに精通していません。次の時間に十分な時間を見つけることができるかどうかが分かりますが、別の質問を開くこともあります。 – Aaron

0

あなたは、変数間違っに値を割り当てるための構文を持っています。 bashスクリプトではなく、DOS batchファイルではありません。

#!/bin/bash 

file_name=$1 
data_type=$2 
username=$3 
password=$4 
address=$5 
start_time=$6 
end_time=$7 

batch_size=1000000000 
batch_start=$start_time 
batch_end=$((current_time + batch_size)) 

while (("$batch_end" < "$end_time")) 

do 

    echo "iteration $i batch_start=$batch_start batch_end=$batch_end" 
    ./$file_name -w flow-index -n "$username" -p "$password" "$address" "$batch_start" "$batch_end" | gzip -c > out 
    batch_start=$((batch_end + 1)) 
    batch_end=$((batch_start + batch_size)) 
done 
+0

まだいくつかのエラーがあります。私は質問を編集しました – Donbeo

+0

@Donbeoあなたは余分なスペースを持っています: 'variable = value'ブレーク、' variable = value'または 'variable = value' work – Aaron