約1000行の情報を含むサーバーレポートであるテキストファイルがあります。私が探している情報の一部についてレポートを取得できるスクリプトを作成しようとしています。
たとえば、
サーバー1の状態の確認
日付 - エラー数
2015年6月25日:14
2015年6月24日: 20日
2015年6月23日: 番号17
2015年6月24日: 33
サーバー2の状態の確認
日付 - エラー数
2015年6月25日:4
2015年6月24日: 13
2015年6月23日: 20日
2015年6月24日: 33
Xによるエラー
サーバー1:
32
サーバー2:
24
これら3つの部分は
- 「サーバー状態チェック1」、
- 「サーバの状態確認2」と
- 「xで発生したエラーです。」
抽出する必要がある各セクションのデータは太字で表示されます。
どうすればいいのか知っている人はいますか?
私はそれを使用できることを知っていますが、フラグと一緒に使用することgrep
はできません。grep
-A
-B
-C
ベストアンサー1
どうですか?sedgotos(衝撃、恐怖)を含むスクリプトです。データをより正確に説明すると、単純化することができます。
sed -n '
:start
/Server .* Health Check/{
n
/Date - Count/n
:loop1
/ : /{p; n; b loop1
}
b start
}
/Errors caused by/{
n
:loop2
/Server/n
/^[0-9]/{p; n; b loop2
}
b start
}
'
スクリプトはタイトルの最初のスタイルを認識し、{}部分を入力します。次の行(n)を読み取るか、日付ヘッダーの場合は別の行を読みます。行が「:」スタイル行(/:/)と一致すると、{}セクションが入力され、行が印刷され(p)、次の行が読み取られ(n)、Loop1ラベルに分岐されます(b)。一致する行がなくなったら、ラベルの先頭に分岐します。
ヘッダーの2番目のスタイルを見ても同じことが起こります。