- あるかな
- 大ベテラン
- 会議室デビュー日: 2003/11/04
- 投稿数: 245
|
投稿日時: 2006-08-03 17:51
これに限ったお話では無いですが、自動化などの定期処理では、
ある種の規則性を見つけ出さないと、人の手を介する形になってしまうと思います。
今回の場合であれば、エラーの文字列に規則性があれば、
その文字列が含まれる場合、下のn行までを含めて拾う、
などのスクリプトを書けば解決しますが。。。
> numで指定してしまいますと
> 2006 Jul 27のログの方も取得してしまいそうで
> 心配なのですが・・・
仰っている状況では、その通りになってしまいますね。
強引な手でやるとすれば、perl などで、
「行先頭に日付形式の出力が無ければ、前行の日付を条件として抽出可否を決定する」
みたいなやり方でしょうか?
※シェルでも出来ると思いますが。。。
|
- 温州蜜柑
- ベテラン
- 会議室デビュー日: 2005/01/24
- 投稿数: 65
- お住まい・勤務地: 東京都
|
投稿日時: 2006-08-03 18:14
引用: |
|
coltrainさんの書き込み (2006-08-03 17:24) より:
説明不足ですいません
messagesは例としてつかわせていただいております
ログの形式としましては
2006 Jul 26 *****
2006 Jul 26 ********
2006 Jul 26 *****
2006 Jul 26 **
2006 Jul 27 **
2006 Jul 27 *****
というふうに普通は1行ごととなっているのですが
エラーが発生してしまいますと
2006 Jul 26 *******
******
**
**
というふうに複数行にわたるログが発生してしまいます
numで指定してしまいますと
2006 Jul 27のログの方も取得してしまいそうで
心配なのですが・・・
|
「2006 Jul 22」とか「2006 Jul 23」を取得する方法はまだ考え中ですが、
こんな風にすればいいかも?
コード: |
|
#!/bin/sh
end_row=`grep -n "2006 Jul 22" xxx | head -1 | perl -pe 's/:.+//g'`
start_row=`grep -n "2006 Jul 23" xxx | head -1 | perl -pe 's/:.+//g'`
start_row=`expr $start_row - 1`
t_row=`expr $start_row - $end_row + 1`
h_row=`expr $start_row + 1`
head -$start_row xxx | tail -$t_row
exit
|
|
- 温州蜜柑
- ベテラン
- 会議室デビュー日: 2005/01/24
- 投稿数: 65
- お住まい・勤務地: 東京都
|
投稿日時: 2006-08-03 18:50
今日はもう帰ります。これで許してください。
コード: |
|
#!/bin/sh
LANG=C
today=`date +'%Y %b %d'`
tomorrow=`date --date '-1 days ago' +'%Y %b %d'`
end_row=`grep -n "$today" xxx | head -1 | perl -pe 's/:.+//g'`
start_row=`grep -n "$tomorrow" xxx | head -1 | perl -pe 's/:.+//g'`
if [ "$start_row" = "" ]; then
start_row=`wc -l xxx | awk '{print +1}'`
fi
start_row=`expr $start_row - 1`
t_row=`expr $start_row - $end_row + 1`
h_row=`expr $start_row + 1`
head -$start_row xxx | tail -$t_row
exit
|
|
- coltrain
- 常連さん
- 会議室デビュー日: 2005/05/20
- 投稿数: 21
|
投稿日時: 2006-08-04 10:52
温州蜜柑さん>
すばらしい!!すごいですね!
正直ぼくの知識だとこのシェルでどのような処理を行っているのか?
がわからなく、いま調べているところなのですが
まさに欲しかったデータが見事にとれました!!!
ほんとうにありがとうございます!!
ただ、もうひとつお願いがあるのですが
log.1
log.2
などの複数のログから
同時に同じ日付で検索し、取得を行いたいのですが
(理由は、同じ日付にでたが、別々のログにまたがってしまっている
ものも同時に取得したいからです)
作成していただいたシェルの中身を自分なりにいろいろいじってみたのですが
↓エラーがおきてしまって行うことができませんでした。
expr: syntax error
expr: syntax error
ご教授のほう、何卒よろしくおねがいいたします。
[ メッセージ編集済み 編集者: coltrain 編集日時 2006-08-04 11:00 ]
|
- 温州蜜柑
- ベテラン
- 会議室デビュー日: 2005/01/24
- 投稿数: 65
- お住まい・勤務地: 東京都
|
投稿日時: 2006-08-04 11:25
引用: |
|
coltrainさんの書き込み (2006-08-04 10:52) より:
ただ、もうひとつお願いがあるのですが
log.1
log.2
などの複数のログから
同時に同じ日付で検索し、取得を行いたいのですが
(理由は、同じ日付にでたが、別々のログにまたがってしまっている
ものも同時に取得したいからです)
|
これでいかが?
コード: |
|
#!/bin/sh
LANG=C
today=`date +'%Y %b %d'`
tomorrow=`date --date '-1 days ago' +'%Y %b %d'`
end_row=`cat log.* | grep -n "$today" | head -1 | perl -pe 's/:.+//g'`
start_row=`cat log.* | grep -n "$tomorrow" | head -1 | perl -pe 's/:.+//g'`
if [ "$start_row" = "" ]; then
start_row=`cat log.* | wc -l | awk '{print $1+1}'` # $1は半角にしてください
fi
start_row=`expr $start_row - 1`
t_row=`expr $start_row - $end_row + 1`
h_row=`expr $start_row + 1`
cat log.* | head -$start_row | tail -$t_row
exit
|
引用: |
|
作成していただいたシェルの中身を自分なりにいろいろいじってみたのですが
↓エラーがおきてしまって行うことができませんでした。
expr: syntax error
expr: syntax error
|
これは文字通り文法エラーです。
exprを使って変数の計算をしています。
こればかりはマニュアルをよみましょう。
[ メッセージ編集済み 編集者: 温州蜜柑 編集日時 2006-08-04 11:36 ]
|
- coltrain
- 常連さん
- 会議室デビュー日: 2005/05/20
- 投稿数: 21
|
投稿日時: 2006-08-04 11:55
お世話になっております
以前頂いたシェルとくらべて、
{print \+1}
に\がついかされておりまして、
実行しましたら
awk: cmd. line:1: {print \+1}
awk: cmd. line:1: ^ backslash not last character on line
とでてしまいました。
ためしに\を削除して実行しましたら
tail: unrecognized option `--36833'
Try `tail --help' for more information.
とでました
\というのはどのような
意味があるのでしょう??
|
- 温州蜜柑
- ベテラン
- 会議室デビュー日: 2005/01/24
- 投稿数: 65
- お住まい・勤務地: 東京都
|
投稿日時: 2006-08-04 12:43
引用: |
|
coltrainさんの書き込み (2006-08-04 11:55) より:
お世話になっております
以前頂いたシェルとくらべて、
{print +1}
にがついかされておりまして、
実行しましたら
awk: cmd. line:1: {print +1}
awk: cmd. line:1: ^ backslash not last character on line
とでてしまいました。
ためしにを削除して実行しましたら
tail: unrecognized option `--36833'
Try `tail --help' for more information.
とでました
というのはどのような
意味があるのでしょう??
|
本当は$1なのですが、投稿したら$が削除されてしまったので、
¥$1としましたが、それでも$が削除されてしまったのです。
修正しておいたので、半角に直してください。
|
- coltrain
- 常連さん
- 会議室デビュー日: 2005/05/20
- 投稿数: 21
|
投稿日時: 2006-08-04 16:46
温州蜜柑様>
ご返答ありがとうございます。
早速試してみたのですが
log.1
log.2
にまたがっている日付のものですと
log.1の分のログしか取得することができませんでした
log.2からも取得でき、なおかつタイムスタンプが早い時間順に整列させることというのは可能なのでしょうか?
(つまりログ番号が後ろのものから順にログを取得する)
|