ログファイルを内容に応じて複数のファイルに分割したい

ログファイルを内容に応じて複数のファイルに分割したい

ログファイルを複数のファイルに分割したいのですが

目次

*** Configuration Database
*** Logs
*** Configuration Logs
*** Query Logs
    .
    .
    and so on

問題は、セクションのタイトルがセクション間の適切なデータまたはログとともに本文に再度表示されるため、各タイトルの 2 番目のインスタンスを検索し、次のタイトルの 2 番目のインスタンスまでのデータをコピーする必要があることです。

*** Configuration Database
    (Data/Logs)

*** Logs
    (Data/Logs)

*** Configuration Logs
    (Data/Logs)

*** Query Logs
    (Data/Logs)

基本的に、デバッグ テキスト ファイルを取得してスクリプトを実行し、元のファイルはそのままにして、ファイルを複数のテキスト ファイルに分割します。各ファイルは目次の各セクションに 1 つずつあります。つまり、基本的に、debug.txt、Configuration Database.txt、Logs.txt などがあり、各ファイルに新しいセクションが始まるまでの各セクションのすべてのデータが含まれます。これは少し難しすぎるので、どなたか助けていただけると大変助かります :)

答え1

これを試して:

awk '/^[*][*][*] /{ if ($0 in seen) fname=$0; else seen[$0];} fname{print>fname}' file

使い方

awk は暗黙的にファイルを行ごとに読み取ります。読み取られた行ごとに、次の処理が行われます。

  • /^[*][*][*] /{ if ($0 in seen) fname=$0; else seen[$0];}

    3 つの星と 1 つのスペースで始まる行については、その行を以前に見たことがあるかどうかを確認します。以前に見たことがある場合は、その行に設定しますfname。そうでない場合は、連想配列を更新して、seenこの行を 1 回見たことがあることを示します。

  • fname{print>fname}

    fnameが空でない値の場合、現在の行を という名前のファイルに書き込みますfname

関連情報