Forme uma saída combinando várias linhas

1

Eu tenho um arquivo de log como abaixo:

/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

Eu quero formar um arquivo de log final, combinando duas linhas como abaixo. Acima de ambas as linhas, comece com /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

Você poderia ajudar no comando unix para isso?

    
por user126356 05.08.2015 / 12:16

1 resposta

0

com awk :

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

Onde:

  • -F: usa : como delimitador.
  • if($1!=a){...} Se a variável contém o mesmo que o primeiro campo, imprima tudo sem uma nova linha no final,
  • else{...} : else imprime todos os campos, exceto o primeiro.
  • {a=$1} Define a variável usada na cláusula if.

Saída:

/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

Eu acho que você quer linha na ordem como aparecem no arquivo de log, não invertido como na saída desejada.

    
por 05.08.2015 / 12:38