ログファイルがありますが、内容に応じて複数のファイルに分割したいと思います。

ログファイルがありますが、内容に応じて複数のファイルに分割したいと思います。

ログファイルがありますが、複数のファイルに分割したいです。

目次

*** 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は暗黙的にファイルを1行ずつ読みます。読み取った各行に対して、次の操作を行います。

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

    3つ星と空白で始まる行について、以前にその行を見たことがないかどうかを確認します。存在する場合はfnameその行に設定します。それ以外の場合は、seen行を一度見たことを示すために連想配列を更新します。

  • fname{print>fname}

    nullでない場合は、fname現在の行を名前付きファイルに書き込みますfname

おすすめ記事