別のログファイルに解析したい複数のログを含むリンクログファイルがあります。後でそれぞれの日付/時刻に名前を変更します。各ログは「---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