Ajustando um script de shell Unix para criar um CSV a partir de um arquivo de log

0

Eu tenho um script de shell Unix que gera saída de um log.

for i in HistSimBasislieferung hedgeAccountingF4PublicSend;do
  report1=$(echo -n $i:)
  date1=$(grep -e $i $PALME_CONF | grep "The job finished" | tail -1 | awk '{print $1,$2}'|\<br/> sed 's/^.\(.*\).$//')
  final="$report1 $date1"
  echo "$final"
done

No momento, a saída é assim:

HistSimBasislieferung 2015-03-11 01:03:02
hedgeAccountingF4PublicSend 2015-03-11 00:16:34

Mas o que eu quero é algo assim:

HistSimBasislieferung,hedgeAccountingF4PublicSend
2015-03-11 01:03:02,2015-03-11 00:16:34

Você tem alguma sugestão sobre como isso pode ser feito?

Eu fiz da maneira que você sugeriu:

   for i in HistSimBasislieferung hedgeAccountingF4PublicSend;do
           echo -n $i > report_log
           grep -e $i $PALME_CONF | grep "The job finished" | tail -1 | awk '{print $1,$2}' | sed 's/^.\(.*\).$//' > date_log

   done
   cat < report_log | xargs echo | tr ' ' ',';
   cat < date_log | xargs echo | tr ' ' ',';
   echo "" > report_log; echo "" > date_log

mas a saída deu:

hedgeAccountingF4PublicSend2015-03-11,00:16:34    
I need it like this:  
HistSimBasislieferung,hedgeAccountingF4PublicSend,  
2015-03-11 03:05:40,2015-03-11 02:12:19,
    
por Uensal 11.03.2015 / 04:13

2 respostas

0

Esse forro pode parecer feio, mas acho que faz o trabalho (se eu entendi o seu caso de uso corretamente).

your_shell_script.sh  | cut -d ' ' -f 1 | tr '\n' ',' | sed 's/,$/\n/'; your_shell_script.sh | cut -d ' ' -f '2-' | tr '\n' ',' | sed 's/,$/\n/'  
    
por 11.03.2015 / 05:51
0

É um script de loop, então ele sobrescreve a variável em todo loop. Minha sugestão aqui é criar um arquivo de log para o "relatório" e um arquivo de log para "data" também (anexar log).

No final do seu script (logo abaixo da linha "done"), execute o comando abaixo:

cat <\report_log_file> | xargs echo | tr ' ' ',';
cat <\date_log_file> | xargs echo | | tr ' ' ','

ou crie outro script de loop.

for i in <\report_log_file> <\date_log_file>; do
   cat $i | xargs echo | tr ' ' ',';
done

depois, limpe os arquivos de log:

echo "" > report_log_file; echo "" > date_log_file
    
por 11.03.2015 / 05:02

Tags