- ベストアンサー
表示桁数をそろえた文字列の格納方法
- ログファイルを時間で検索するシェルスクリプトを作成する際、変数に表示桁数をそろえた文字列を格納したい場合、printfの%02dを使用すると正しく生成することができます。
- 例えば、01と表示されるように、変数hの値に%02dを指定して、printfでフォーマットすることができます。
- 具体的には、searchStr="Jun 23 $(printf "%02d" $h):$(printf "%02d" $m)"のように記述します。これにより、変数hやmの値が1桁の場合でも、2桁の表示を保つことができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> searchStr="Jun 23 `printf "%02d" $h` :" なりましたけど? このままだと、$mの方は%02dが適用されませんが。 > for((h=0;h<24;h++)) > for ((m=0;m<59;m++)) これだと、毎時59分は検索しませんが、それで正しいですか? > cat ログファイル | grep searchStr #ここで検索するための文字列を作成したい。 単にログファイルから検索するだけなら、catしなくても grep "$searchStr" ログファイル で十分。 > echo $searchStr #文字列確認 等と時間毎の処理が入っていますが、これが必要無いなら、正規表現を使ってまとめて検索するという方法もあります。 > cat ログファイル | grep searchStr #ここで検索するための文字列を作成したい。
その他の回答 (2)
- notnot
- ベストアンサー率47% (4900/10358)
>(searchStr="Jun 23 `printf "%02d" $h` :" 等してみましたが、00が入っただけで、01とかになりませんでした。) 確認の仕方が悪いのでは?$mについても同様にすれば、それで合ってます。 普通は、こうシンプルに書きますが、まあ、どっちでも同じ結果で、うまくいきます。 searchStr=`printf "Jun 23 %02d:%02d" $h $m`
お礼
>(searchStr="Jun 23 `printf "%02d" $h` :" 等してみましたが、00が入っただけで、01とかになりませんでした。) 確かに動きました…。 なぜか原因不明でしたが。 >searchStr=`printf "Jun 23 %02d:%02d" $h $m` こちらのほうも参考にさせて頂きます。 御教示ありがとうございました。
- mkt23456
- ベストアンサー率33% (21/63)
自分もスマートに書けないですが、 a=2 c="00"$a echo c$ echo ${c:(-2):2} あたりでヒントになりませんか?
お礼
サンプルありがとうございます。 参考にさせて頂きたいと思います。 御教示ありがとうございました。
お礼
>なりましたけど? このままだと、$mの方は%02dが適用されませんが。 再度動かしてみたら、できました。 なぜだめだったんだろう…。 ありがとうございます。 他の指摘いただいた部分は、自分で直しておきました。 御教示、ありがとうございました。