私は以下のような内容のファイルを持っています。while条件whileループbash
864440 17:59:48.143
864440 17:59:48.221
864441 17:59:48.159
864441 17:59:48.221
864442 17:59:48.159
864442 17:59:48.237
864443 17:59:48.174
864444 17:59:48.190
864444 17:59:48.253
864445 17:59:48.206
864445 17:59:48.268
864446 17:59:48.221
864446 17:59:48.284
私は1番目と2番目の値を読み取るためにwhileループを実行しています。
私はjbnumは、次の反復に等しいならば、何もしないし、次の反復にを行っていない場合、それは同じジョブ番号の時間差になるだろうということであれば条件を追加したいと思います
while read list; do
jbnum=`echo $list|awk '{print $1}'`
time=`echo $list|awk '{print $2}'`
done < jobstmp.txt
あなたのアプローチは、あなたが$list
解析する必要はありません方法で改善することができるクリスマース
while read jobnum time
do
if [[ "$prevjobnum" == "$jobnum" ]]
then
ENDTIME=`date +%s.%N -d "$time"`
STARTTIME=`date +%s.%N -d "$prevtime"`
DIFF=$(echo $ENDTIME - $STARTTIME | bc | sed 's/0\{1,\}$//')
echo "$prevjobnum time is $DIFF seconds"
fi
# keep variables for next iteration
prevjobnum=$jobnum
prevtime=$time
done < jobstmp.txt
たとえば、後で864440が発生するので、最初の行でアクションを実行しますか?ファイルを読むときには後ろ向きに進むことはできませんので、正確に何をしたいのかを明確にする必要があります。おそらく、フィールドが繰り返されていることに気づいたときに、次の行で行うことができるからです。 – fedorqui
@fedorqui最初の列の値が次の繰り返しで同じ場合、何をしたいのかを正確に示すために質問を更新しました – Dren
ありがとうございました!あなたの質問を完璧にするために、この入力に対する望ましい出力が何であるかも指定してください。 – fedorqui