ファイルの特定の部分を検索し、その部分から関連情報のみを抽出するにはどうすればよいですか?

ファイルの特定の部分を検索し、その部分から関連情報のみを抽出するにはどうすればよいですか?

約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番目のスタイルを見ても同じことが起こります。

おすすめ記事