0
私はバッチの開始日の下に持って、ラインと呼ばれる変数に格納されている時刻、終了日、終了時刻と状態を開始します。シェルスクリプト - 列の値を読み込んで変数に格納する最も良い方法は?
echo "$line"
batch1 09/09/2016 15:12:00 09/09/2016 16:00:00 success
私は様々な変数に各coulmn値を格納する必要があります:batch_name、START_DATE、START_TIME、 end_date、end_time、status。それをやっての
一つの方法は、awkを使用して、しかしcloumnsの数が非常に大きい場合雑然と見えている:
batch_name="$(echo $line|awk '{ print $1}')"
start_date="$(echo $line|awk '{ print $2}')"
start_time="$(echo $line|awk '{ print $3}')"
end_date="$(echo $line|awk '{ print $4}')"
end_time="$(echo $line|awk '{ print $5}')"
status="$(echo $line|awk '{ print $6}')"
もう一つの方法は、ループしながら使用しているが、それは文句を言わない、whileループスポーンので、外ループしながら値を保持しますサブシェル:
echo "$line"|while read batch_name start_date start_time end_date end_time status;do
echo ""
done
PS:
私は多くのバッチの状態を格納するファイルを持っています。私はそれぞれの行を反復処理する必要があるとなどのステータス、終了時間に基づいて、いくつかの処理を実行する必要があります。
cat batch_status.txt
batch1 09/09/2016 15:12:00 09/09/2016 16:00:00 success
batch2 08/09/2016 09:00:08 09/09/2016 01:56:12 inprogress
batch3 08/09/2016 07:15:28 08/09/2016 01:46:22 failure
私の最後のスクリプトは次のようになります。bashのでは
cat batch_status.txt|while read line;do
#read LINE and store each column values to corresponding variable (best way to do it?)
#do processing based on batch_name,start_date,start_time,end_date,end_time,status
done
'読み取り中-rバッチ名start_date start_time end_date end_time status;エコー "ここで処理する"; done
anubhava
whileループがサブシェルを生成し、変数値がループ中に反映されないので、これはbashでは機能しません – penguin
いいえ、whileループはサブシェルを生成しませんが、パイプラインサブシェルを作成します。 – anubhava