アプリ版:「スタンプのみでお礼する」機能のリリースについて

ログファイルを、時間で検索するシェルスクリプトを作成したいと考えています。
変数searchStr に、ログから検索対象となる時間をループで生成したい。
例:「Jun 23 00:23」(※この文字列を作成したい。)

以下スクリプト作成しましたが
結果として、変数h、mが、1~9の時、searchStr は「Jun 23 0:23」や「Jun 23 0:3」になります。
時間と分の桁数が、変数が1ケタの場合、1→01としたい。

printfの%2dとか指定し、変数に入れてみたりしたのですが上手く文字列を生成することが出来ないのです。
(searchStr="Jun 23 `printf "%02d" $h` :" 等してみましたが、00が入っただけで、01とかになりませんでした。)


#!/bin/bash

for((h=0;h<24;h++))
do
for ((m=0;m<59;m++))
do
searchStr="Jun 23 "$h":"$m
echo $searchStr #文字列確認

cat ログファイル | grep searchStr #ここで検索するための文字列を作成したい。
done
done

良い解決方法がありましたら、ご教示お願いします。

A 回答 (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 #ここで検索するための文字列を作成したい。
    • good
    • 0
この回答へのお礼

>なりましたけど?
このままだと、$mの方は%02dが適用されませんが。

再度動かしてみたら、できました。
なぜだめだったんだろう…。
ありがとうございます。

他の指摘いただいた部分は、自分で直しておきました。
御教示、ありがとうございました。

お礼日時:2013/06/24 00:12

>(searchStr="Jun 23 `printf "%02d" $h` :" 等してみましたが、00が入っただけで、01とかになりませんでした。

)

確認の仕方が悪いのでは?$mについても同様にすれば、それで合ってます。

普通は、こうシンプルに書きますが、まあ、どっちでも同じ結果で、うまくいきます。
searchStr=`printf "Jun 23 %02d:%02d" $h $m`
    • good
    • 0
この回答へのお礼

>(searchStr="Jun 23 `printf "%02d" $h` :" 等してみましたが、00が入っただけで、01とかになりませんでした。)

確かに動きました…。
なぜか原因不明でしたが。

>searchStr=`printf "Jun 23 %02d:%02d" $h $m`
こちらのほうも参考にさせて頂きます。

御教示ありがとうございました。

お礼日時:2013/06/24 00:15

自分もスマートに書けないですが、



a=2
c="00"$a
echo c$
echo ${c:(-2):2}

あたりでヒントになりませんか?
    • good
    • 0
この回答へのお礼

サンプルありがとうございます。
参考にさせて頂きたいと思います。

御教示ありがとうございました。

お礼日時:2013/06/24 00:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!