- - PR -
date grep for & スクリプトの使いこなし
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-01-05 11:33
下記の様にファイルを2つ作りました。
sys.logはログファイルで、test.shはログファイルの中でパソコン日付のログを抽出するスクリプトです。 sys.logの特徴として、日付けが1桁の時に月名と日付けの空白が2つあり、日付けが2桁の時はそれが1つとなります。 パソコンの日付けを1/15とした場合は Jan 15,38 を抽出するのですが、1/5とした場合は、何も抽出しません。 疑問@ 1/5の場合、Jan 5,16を抽出しないのはなぜでしょう? 3行目の処置で日付けが1桁でも空白が追加されるはず。ターミナルでは追加されます。 疑問A 18-19行目間に、$MESをファイルに落としたところ、全ての空白が抜けます。 $MESが、Jan15とかJan5とかなります。 以上、お返事お待ちしております。(Redhat Linuxを使用) ------ 記 -------- <ファイル:sys.log> Jan 5,16 ⇒Janと5の間は空白2文字 Jan 15,38 ⇒Janと15の間は空白1文字 <ファイル:test.sh> 1:#!/bin/bash 2:TDAYM=`date +%m` 3:TDAYD=`date +%_d` ⇒日付けが1桁の場合に空白1文字入れる為、アンダースコアです。 4:case $TDAYM in 5: '01')TDAYM="Jan ";; ⇒月名の後に空白1文字入れてます。以下同じ。 6: '02')TDAYM="Feb ";; 7: '03')TDAYM="Mar ";; 8: '04')TDAYM="Apr ";; 9: '05')TDAYM="May ";; 10: '06')TDAYM="Jun ";; 11: '07')TDAYM="Jul ";; 12: '08')TDAYM="Aug ";; 13: '09')TDAYM="Sep ";; 14: '10')TDAYM="Oct ";; 15: '11')TDAYM="Nov ";; 16: '12')TDAYM="Dec ";; 17:esac 18:MES=`echo $TDAYM$TDAYD` 19:for SET in `cat /var/log/sys.log |grep "$MES"` ⇒複数ファイル対応の為、catを使用 20:do 21: echo "$SET" >>/var/log/today.log 22:done [ メッセージ編集済み 編集者: 八兵衛 編集日時 2005-01-05 11:41 ] | ||||
|
投稿日時: 2005-01-05 12:48
空白の処理(欧文では普通、HTML表示でもおなじみ)では
MES=-$TDAYM-$TDAYD- 12:47:10 ~ echo -$MES- --Jan - 5-- 12:47:15 ~ MES=-$TDAYM$TDAYD- 12:47:31 ~ echo -$MES- --Jan 5-- 12:47:35 ~ Cygwin ではこうです。 ---------------------------- 訂正 文字列連結で echo `〜` を動かす必要はない (ここで空白の正規化が入ってしまう)。 echo "$MES" で正規化前の文字列が見える。 正解は echoの実行を取り除く MES=$TDAYM$TDAYD [ メッセージ編集済み 編集者: MMX 編集日時 2005-01-05 14:08 ] | ||||
|
投稿日時: 2005-01-05 13:19
[ メッセージ編集済み 編集者: コブラ 編集日時 2005-01-05 14:16 ] | ||||
|
投稿日時: 2005-01-05 14:09
MMXさん、ご回答ありがとうございます。
文法の違いか、残念ながらエラーになってしまいました。 コブラさん、ご回答ありがとうございます。 私の記述ミスかもしれませんが、 grep "^$mon[ ][ ]*$day " sys.log で、データを抽出できませんでした。 day=`echo $day | sed 's/0//g'` ですが、10日や20日が1日や2日になってしまいませんでしょうか? 私の方で試してみたのですが、 18:MES=`echo $TDAYM$TDAYD` を MES=`date +%bバックスラッシュ %_d` でうまくいきました。 もう少しチェックしますが、これで良さそうでしょうか? 良さそう、ダメそう、何か言えそうでしたらお願いいたします。 | ||||
|
投稿日時: 2005-01-05 14:17
あ〜、そうですね。
10 とか 20 は 1 とか 2 になってまいますな。 修正しときました (プ | ||||
|
投稿日時: 2005-01-05 14:25
ふむ。
キッチリやるには、こうするべきでしょうな。
|
1