複数行を組み合わせて出力形式

複数行を組み合わせて出力形式

次のログファイルがあります。

/export/home/got/logs/o2877612.01:job_1432787863184_159408 Message: org.apache.pig.backend.executionengine.ExecException: ERROR 2118: Input path does not exist: /user/got/distro
/export/home/got/logs/o2877612.01:Module: SUMMARY_PIG

次の2行を組み合わせて最終ログファイルを構成したいと思います。上記の2行はすべて次から始まります/export/home/got/logs/o2877612.01

/export/home/got/logs/o2877612.01:Module: SUMMARY_PIG :job_1432787863184_159408 Message: org.apache.pig.backend.executionengine.ExecException: ERROR 2118: Input path does not exist: /user/got/distro

Unixコマンドを助けることができますか?

ベストアンサー1

そしてawk

awk -F: '{if($1!=a){printf "\n%s", $0}else{$1=":";print}} {a=$1}' file

どこ:

  • -F:区切り文字として使用されます:
  • if($1!=a){...}変数に最初のフィールドと同じ内容が含まれている場合は、最後に改行なしですべての内容を印刷します。
  • else{...}: それ以外の場合は、最初のフィールドを除くすべてのフィールドを印刷します。
  • {a=$1}if句で使用される変数を設定します。

出力:

/export/home/got/logs/o2877612.01:job_1432787863184_159408 Message: org.apache.pig.backend.executionengine.ExecException: ERROR 2118: Input path does not exist: /user/got/distro: Module  SUMMARY_PIG

私の考えでは、出力が望む順序で反転されるのではなく、ログファイルに表示される順序で行を表示したいと思います。

おすすめ記事