にsedはawk、どうやって対応記録の分離機る*ある*複数のライン?

StackOverflow https://stackoverflow.com/questions/310191

  •  10-07-2019
  •  | 
  •  

質問

私のログファイル:

 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

たいへの解析を複数行の応募が猫は見つかりがあります。)何が最善の方法でこれ sed および/または 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
役に立ちましたか?

解決

スペースで始まるすべての行が、(g)awkで簡単に続きます(これは私の記憶によるものです。したがって、いくつかの小さなタイプミスがあり、改行を追加して読みやすくするために):

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

whatever は、出力が発生するかどうかのチェックです(例:cat)。

他のヒント

と仮定してログファイルに含まれていない制御文字 '\01''\02', ことになるの継続線を正確かつ空間の中では、下記されるようになる:

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"

説明:この置き換え改行コードとアスキー1(制御文字などが表示され、ログファイル)と各シーケンスの"改行コード-空間-空間-空間-スペース"の2アスキー(別制御文字)を指定する。その後、再置換ASCII1改行は、今までの各シーケンスの複数のラインは、旧字交換によるアスキー2.これはgreppedのための猫の2アスキーの再置換の改行コード-空間-空間-空間-空間の組み合わせです。

このようなものですか?

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

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

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

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

$ awk -v Pre=Wed 'BEGIN {RS = "\\n?\\s*" Pre} /cat.\n?/ {print Pre <*>}' 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top