下記のスクリプトで動くのですが、awkのところ、別の表現がないでしょうか?
※実はほぼ同じことをしているのに、別のデータできちんと動かないことがあり、
もしかしたら、数値と文字列が違っていても自動で解釈してくれる場合とそうでない場合があるような気がしております。
#!/bin/bash date=20211201 date_e=20220228 while [ 1 ] ; do yy=`echo $date | cut -c 1-4` mm=`echo $date | cut -c 5-6` dd=`echo $date | cut -c 7-8` awk -F'[ :/,"]' '($1==yy && $2==mm && $3==dd){print $4}' yy="$yy" mm="$mm" dd="$dd" input.txt if [ $date = $date_e ] ; then break fi date=`date -d "$date 1day" "+%Y%m%d"` done
入力データ
2021 12 9 70
2021 12 24 65
2022 1 3 45
2022 2 5 90
2022 2 12 80
2022 2 24 70
質問をシンプルにするために省略していましたが、実際は下記のような感じで、別のところ($4=”A”)でひっかかっているようです。本来は別の質問を立ち上げるべきなのかもしれませんが、補足させていただきます。皆様、とても参考になりました。ありがとうございました。
<スクリプト>
#!/bin/bash
date=20211201
date_e=20220228
while [ 1 ] ; do
yy=`echo $date | cut -c 1-4`
mm=`echo $date | cut -c 5-6`
dd=`echo $date | cut -c 7-8`
awk -F'[ :/,"]' '($1==yy && $2==mm && $3==dd && $4=="A"){print $4}' yy="$yy" mm="$mm" dd="$dd" input.txt
if [ $date = $date_e ] ; then
break
fi
date=`date -d "$date 1day" "+%Y%m%d"`
done
<入力データ>
2021 12 9 70 A
2021 12 24 65 B
2022 1 3 45 C
2022 2 5 90 D
2022 2 12 80 E
2022 2 24 70 F
この$4は$5の間違いでした。また、print $5です。重ね重ねすみません。
引っかかっているのは、$5=="A"とした場合と$5="A"とした場合に、後者であれば出力はしてくれるのですが、なぜか数字の1が出力されます。
記を踏まえ、別の質問をこれから投稿しますので、こちらへのお返事は不要です。申し訳ございません。
回答3件
あなたの回答
tips
プレビュー