複数のデータを別々のファイルに解析する

複数のデータを別々のファイルに解析する

別のログファイルに解析したい複数のログを含むリンクログファイルがあります。後でそれぞれの日付/時刻に名前を変更します。各ログは「---LOG REPORT---」で区切られます。

これまで私は以下を持っています:

sed -n '/--- LOG REPORT ---/,/--- LOG REPORT ---/p' logname.log > test.out

しかし、想像できるように、これはパターンの最初のインスタンスのみを出力します。 sedのマニュアルページを見ましたが、複数のファイルを出力できるとは思いません。ファイルが空になるまでファイルを抽出することもできますが、操作が多すぎるようです。どうすればいいですか?代わりにawkを使用する必要がありますか?

入力ファイルfilename.logの例

--- LOG REPORT ---
Mary
Had
A
Little
Lamb
--- LOG REPORT ---
Her
Fleece
Was
White
As
Snow

希望の出力:

filename_1.logにあります

--- LOG REPORT ---
Mary
Had
A
Little
Lamb

filename_2.logにあります

--- LOG REPORT ---
Her
Fleece
Was
White
As
Snow

答え1

このコマンドはどうですか?

csplit logname.log /---\ LOG\ REPORT\ ---/ {*}

テスト

cat logname.log
--- LOG REPORT ---
Mary
Had
A
Little
Lamb
--- LOG REPORT ---
Her
Fleece
Was
White
As
Snow

上記のコマンドを実行した後に得た結果は次のとおりです。

cat xx01
--- LOG REPORT ---
Mary
Had
A
Little
Lamb
cat xx02
--- LOG REPORT ---
Her
Fleece
Was
White
As
Snow

答え2

どうですか?

awk '/--- LOG REPORT ---/ {n++;next} {print > "test"n".out"}' logname.log

答え3

間違ったツールです。たとえば、Perlやawkを使用します。

cat > splitFileByLogReport.pl <<EOF
#!/usr/bin/perl

undef $/;
$_ = <>;
$n = 0;

for $match (split(/(?=--- LOG REPORT ---)/)) {
      open(O, ">$ARGV[$argnum]" . ++$n);
      print O $match;
      close(O);
}

末梢血

次に、次を実行します。

perl splitFileByLogReport.pl yourFile.txt

関連情報