ログファイルがありますが、複数のファイルに分割したいです。
目次
*** 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
。