Saida para determinada Linha - Shell

1. Saida para determinada Linha - Shell

natha
ncampos

(usa Debian)

Enviado em 17/08/2016 - 16:28h

Boa tarde,
Tenho um script de backup no qual gera um log, desejo organizar as informações da saida desse log que no qual jogo para um arquivo.txt.
logo de inicio faço uma saida
exemplo:
DATA+HORA + echo "backup iniciado"
apenas registrando que script iniciou, após logo inicia o backup tambem jogando a saida para o arquivo, após finalizar também gravo DATA+HORA + echo "backup finalizado"

Como determino qual "linha" sera a saída desse comando (DATA+HORA + echo "backup finalizado),pois como infomo no final do comando (para que seja registrado a "hora final" ) respectivamente ele sera no final,porem desejo que ele apareça no inicio do arquivo junto ao "backup iniciado.










  


2. Re: Saida para determinada Linha - Shell

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 17/08/2016 - 23:08h

ncampos escreveu:

Boa tarde,
Tenho um script de backup no qual gera um log, desejo organizar as informações da saida desse log que no qual jogo para um arquivo.txt.
logo de inicio faço uma saida
exemplo:
DATA+HORA + echo "backup iniciado"
apenas registrando que script iniciou, após logo inicia o backup tambem jogando a saida para o arquivo, após finalizar também gravo DATA+HORA + echo "backup finalizado"

Como determino qual "linha" sera a saída desse comando (DATA+HORA + echo "backup finalizado),pois como infomo no final do comando (para que seja registrado a "hora final" ) respectivamente ele sera no final,porem desejo que ele apareça no inicio do arquivo junto ao "backup iniciado.


Boa noite Ncampos.
Para REGISTRAR a HORA ATUAL, não defina a VAR HORA,
Utilize o comando,da seguinte forma:
echo "$(date +%x" "%x) => BACKUP INICIADO" 

echo "$(date +%x" "%x) => BACKUP FINALIZADO" 


Att.:
Marcelo Oliver




3. Re: Saida para determinada Linha - Shell

natha
ncampos

(usa Debian)

Enviado em 18/08/2016 - 09:34h

msoliver escreveu:

ncampos escreveu:

Boa tarde,
Tenho um script de backup no qual gera um log, desejo organizar as informações da saida desse log que no qual jogo para um arquivo.txt.
logo de inicio faço uma saida
exemplo:
DATA+HORA + echo "backup iniciado"
apenas registrando que script iniciou, após logo inicia o backup tambem jogando a saida para o arquivo, após finalizar também gravo DATA+HORA + echo "backup finalizado"

Como determino qual "linha" sera a saída desse comando (DATA+HORA + echo "backup finalizado),pois como infomo no final do comando (para que seja registrado a "hora final" ) respectivamente ele sera no final,porem desejo que ele apareça no inicio do arquivo junto ao "backup iniciado.


Boa noite Ncampos.
Para REGISTRAR a HORA ATUAL, não defina a VAR HORA,
Utilize o comando,da seguinte forma:
echo "$(date +%x" "%x) => BACKUP INICIADO" 

echo "$(date +%x" "%x) => BACKUP FINALIZADO" 


Att.:
Marcelo Oliver



Certo como determino então para que BACKUP FINALIZADO apareça no inicio do log (exemplo: abaixo do BACKUP INICIADO? )



4. Re: Saida para determinada Linha - Shell

thinomar
thinomar

(usa Linux Mint)

Enviado em 18/08/2016 - 11:09h

Eu não consegui compreender o que você disse, mas vou supor que você quis dizer que quer deixar os blocos do log assim:
18/08/2016 10:00 => Backup Iniciado
18/08/2016 10:09 => Backup Finalizado
*restante do log do backup*

Sendo assim, há duas formas de se deixar a última linha logo abaixo da primeira:
1º: Gravar a linha de backup iniciado, jogar tudo que tem que ser logado do backup em uma variável e gravar no log apenas após gravar o backup finalizado. Exemplo:
echo "18/08/2016 10:00 => Backup Iniciado" >> meu_log.log
log=$(meu_comando_de_backup_com_saida)
echo "18/08/2016 10:10 => Backup Finalizado" >> meu_log.log
echo $log >> meu_log.log


2º Gravar o log normalmente e, por fim, dar um jeito de inserir a linha de finalizado logo abaixo da de iniciado. Exemplo:
iniciado="18/08/2016 10:00 => Backup Iniciado"
echo $iniciado >> meu_log.log
meu_comando_de_backup_com_saida >> meu_log.log
finalizado="18/08/2016 10:10 => Backup Finalizado"
gawk -i inplace -v iniciado="$iniciado" -v finalizado="$finalizado" '{print $0} ; /iniciado/ {print finalizado}' meu_log.log

Lembre de testar antes, porque não testei o gawk e não me responsabilizo por perda de dados ou danos, mas para explicar a sintaxe utilizada no gawk:
- -i inplace: Para gravar direto no arquivo lido, que é o, literal, gravar "in place"
- -v iniciado="$iniciado" -v finalizado="$finalizado": Convertendo uma variável do shell para uma do awk
- '{print $0} ; /iniciado/ {print finalizado}': Imprime a linha lida normalmente, mas caso ela contenha exatamente o mesmo conteúdo da variável "$iniciado", imprime o conteúdo da variável "$finalizado" logo em seguida


5. Re: Saida para determinada Linha - Shell

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 19/08/2016 - 15:56h

Segue a solução:
echo "$(date +%x-%X) => BACKUP INICIADO" >> log.txt
SEUS COMANDOS . . . >> log.txt
sed -i '/INICIADO$/a'$(date +%x/%X)' => BACKUP FINALIZADO' log.txt

OBS.:
A frase "DATA-HORA => BACKUP FINALIZADO", será colocada
Após a linha que tem a palavra "INICIADO" no FINAL.

Att.:
Marcelo Oliver








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts