通过组合多行形成输出

通过组合多行形成输出

我有一个日志文件如下:

/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

我想通过组合如下两行来形成最终的日志文件。上面两行都以/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){...}如果 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

我认为您希望按照日志文件中出现的顺序排列行,而不是按照您想要的输出中的顺序颠倒。

相关内容