3

私のログファイルは次のとおりです。

 Wed Nov 12 blah blah blah blah cat1
 Wed Nov 12 blah blah blah blah
 Wed Nov 12 blah blah blah blah 
 Wed Nov 12 blah blah blah blah cat2
     more blah blah
     even more blah blah
 Wed Nov 12 blah blah blah blah cat3
 Wed Nov 12 blah blah blah blah cat4

cat が最初の行にある完全な複数行エントリを解析したいと思います。sedand/orでこれを行う最善の方法は何awkですか?

つまり、解析で次のように生成する必要があります。

 Wed Nov 12 blah blah blah blah cat1
 Wed Nov 12 blah blah blah blah cat2
     more blah blah
     even more blah blah
 Wed Nov 12 blah blah blah blah cat3
 Wed Nov 12 blah blah blah blah cat4
4

4 に答える 4

1

スペースで始まるすべての行が次の行の続きであると言う場合は、(g)awk を使用すると簡単です (これは私の記憶によるものなので、マイナーなタイプミスが含まれている可能性があり、改行を追加して読みやすくするためです):

awk " BEGIN { multiline = 0;} 
      ! /^ / { if (whatever) 
                 { print; multiline = 1;} 
               else 
                 multiline = 0; 
             } 
        /^ / {if (multiline == 1) 
                 print;
             } 
     " 
      yourfile

whatever出力が発生するかどうかのチェックはどこにありますか(たとえば、猫の場合)。

于 2008-11-21T21:41:45.577 に答える
1

'\01'ログ ファイルに制御文字およびが含まれておらず'\02'、継続行が正確に 4 つのスペースで始まると仮定すると、次のように動作する可能性があります。

c1=`echo -en '\01'`
c2=`echo -en '\02'`
cat logfile | tr '\n' $c1 | sed "s/$c1    /$c2/g" | sed "s/$c1/\n/g" | grep cat | sed "s/$c2/\n    /g"

説明: これにより、各改行が ASCII 1 (ログ ファイルに表示されてはならない制御文字) に置き換えられ、各シーケンス "newline-space-space-space-space" が ASCII 2 (別の制御文字) に置き換えられます。次に、ASCII 1 を改行に再置換するため、複数行の各シーケンスが 1 行にまとめられ、古い改行が ASCII 2 に置換されます。これは cat に対して grep され、次に ASCII 2 がnewline-space-space-space-space の組み合わせ。

于 2008-11-21T21:32:40.837 に答える
0

このようなもの?

awk 'function print_part() { if(cat) print part }  /^  / { part = part "\n" $0; next } /cat[0-9]$/ { print_part(); part = $0; cat = 1; next;  } { print_part(); cat=0} END { print_part() }' inputfile

/^ /正規表現は継続行を識別します。

正規表現は、/cat[0-9]$/保持したい開始行を識別します。

于 2008-11-21T21:43:12.843 に答える
0

別のアプローチはRS、通常以外のものに設定することです\n。例えば:

$ awk -v Pre=Wed 'BEGIN {RS = "\\n?\\s*" Pre} /cat.\n?/ {print Pre $0}' file.log
Wed Nov 12 blah blah blah blah cat1
Wed Nov 12 blah blah blah blah cat2
     more blah blah
     even more blah blah
Wed Nov 12 blah blah blah blah cat3
Wed Nov 12 blah blah blah blah cat4
于 2014-04-18T07:45:37.990 に答える