Discussion:
[shell-script] Duvidas sobre arquivos vazios.
Rodrigo Cunha rodrigo.root.rj@gmail.com [shell-script]
2017-02-04 15:48:00 UTC
Permalink
Srs,

Criei o script de backup abaixo que envia um e-mail para meu usuário quando
o backup falha ou tem sucesso com mensagens diferentes, o problema é que
simulei um teste alterando a senha do meu root do mysql e os arquivos foram
gerados vazios;

Surgiu uma duvida, existe alguma forma de eu analisar através do if, se meu
arquivo estiver vazio?

script:

#!/bin/sh
#Autor: Rodrigo da Silva Cunha
# Backupmysql.sh
DATA=`/bin/date +%Y%m%d`
# NOME armazena o nome do arquivo de backup, neste caso
# o diretório é /home/workstation/backup, configure aqui o seu
# variáveis do Script
HOST="localhost"
USER="root"
PASSWORD=$(cat /root/.mysqlpass)
DATABASE1="my_wiki"
DATABASE2="forum"
NOME1="/mnt/HD2/backup/db/mysql.$DATABASE1.$DATA.bkp"
NOME2="/mnt/HD2/backup/db/mysql.$DATABASE2.$DATA.bkp"
echo iniciando backups Mysql $DATA >> /var/log/backup.registro.log
mysqldump -h $HOST -u $USER -p$PASSWORD --opt $DATABASE1 > $NOME1
2>>/var/log/backup.registro.log
mysqldump -h $HOST -u $USER -p$PASSWORD --opt $DATABASE2 > $NOME2
2>>/var/log/backup.registro.log

#Envio de Email
if [ -e $NOME1 ]
then
echo "mysql bpk $DATABASE1" | mutt -s "Backup na base de dados
$DATABASE1 executado com sucesso" ***@gmail.com
else
echo "PROBLEMA bpk $DATABASE1" | mutt -s "PROBLEMA de Backup na
$DATABASE1" ***@gmail.com
fi

if [ -e $NOME2 ]
then
echo "mysql bpk $DATABASE2" | mutt -s "Backup na basede de dados
$DATABASE2 executado com sucesso" ***@gmail.com
else
echo "PROBLEMA bpk $DATABASE2" | mutt -s "PROBLEMA de Backup na base de
dados $DATABASE2" ***@gmail.com
fi
#FIM
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
itamarnet@yahoo.com.br [shell-script]
2017-02-04 17:32:45 UTC
Permalink
Caro Rodrigo

No seu "if" vc usou o comando "test" apenas conferindo se o arquivo existe com a opção "-e".
Mas existe a opção "-s" que testa a existência e se o tamanho é maior que zero.

if [ -s $NOME1 ]

essa sintaxe poderia substituir.

Todavia se o backup falhar e o arquivo de saida não for totalmente vazio, então poderia concatenar com outra verificação dentro do "test", por exemplo supondo que o backup num situação extrema tenha que ter pelo menos 10 linhas:

if [ -e "$NOME1" -a $( sed -n '$=' "$NOME1") -ge 10 ]
ou
if [ -e "$NOME1" -a $(awk 'END {print NR}' "$NOME1") -ge 10 ]
ou
if [ -e "$NOME1" -a $(wc -l "$NOME1" | sed 's/ .*//') -ge 10 ]

Isso atende?

[]'s
Itamar
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2017-02-04 18:21:26 UTC
Permalink
Fala Rodrigo,
Vc perguntou: " existe alguma forma de eu analisar através do if, se meu
arquivo estiver vazio?", então é necessário, antes de mais nada, dizer que
aqui o if não testa condição, ele testa instrução. Quem testa condição é o
cmd test e os operadores matemáticos e, diga-se de passagem o teu if [ -e
$NOME1 ] é o mesmo que if test -e $NOME1, ou seja [[ ... ]] [ ... ] são
formas mais modernas do cmd test e prefiro a primeira.

Uma vez dito isso vamos primeiramente à sua resposta. A forma de vc testar
se um arquivo *não* está vazio é usando a opção -s do cmd test:
[[ -s "$NOME1" ]] &&
echo tá vazio # Ihhh! Cadê o if? ;)

Sobre isso tenho 2 comentários:

1. Coloquei a variável entre aspas pq se $NOME1 tiver espaço, dá zebra;
2. Pode ser que $NOME1 tenha dado, mas o backup foi mal feito. Aí a
melhor coisa a fazer é usar o cmd md5.

​Bom fim de semana para todos.​

Abcs,
Julio

*​Damos treinamento em sua empresa por *
*um preço, no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*

​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Best Sellers​ ​*​laureados ​sobre os temas. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Srs,
Criei o script de backup abaixo que envia um e-mail para meu usuário
quando o backup falha ou tem sucesso com mensagens diferentes, o problema é
que simulei um teste alterando a senha do meu root do mysql e os arquivos
foram gerados vazios;
Surgiu uma duvida, existe alguma forma de eu analisar através do if, se
meu arquivo estiver vazio?
#!/bin/sh
#Autor: Rodrigo da Silva Cunha
# Backupmysql.sh
DATA=`/bin/date +%Y%m%d`
# NOME armazena o nome do arquivo de backup, neste caso
# o diretório é /home/workstation/backup, configure aqui o seu
# variáveis do Script
HOST="localhost"
USER="root"
PASSWORD=$(cat /root/.mysqlpass)
DATABASE1="my_wiki"
DATABASE2="forum"
NOME1="/mnt/HD2/backup/db/mysql.$DATABASE1.$DATA.bkp"
NOME2="/mnt/HD2/backup/db/mysql.$DATABASE2.$DATA.bkp"
echo iniciando backups Mysql $DATA >> /var/log/backup.registro.log
mysqldump -h $HOST -u $USER -p$PASSWORD --opt $DATABASE1 > $NOME1
2>>/var/log/backup.registro.log
mysqldump -h $HOST -u $USER -p$PASSWORD --opt $DATABASE2 > $NOME2
2>>/var/log/backup.registro.log
#Envio de Email
if [ -e $NOME1 ]
then
echo "mysql bpk $DATABASE1" | mutt -s "Backup na base de dados
else
echo "PROBLEMA bpk $DATABASE1" | mutt -s "PROBLEMA de Backup na
fi
if [ -e $NOME2 ]
then
echo "mysql bpk $DATABASE2" | mutt -s "Backup na basede de dados
else
echo "PROBLEMA bpk $DATABASE2" | mutt -s "PROBLEMA de Backup na base
fi
#FIM
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
Rodrigo Cunha rodrigo.root.rj@gmail.com [shell-script]
2017-02-04 19:54:14 UTC
Permalink
Obrigado srs!
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
Fala Rodrigo,
Vc perguntou: " existe alguma forma de eu analisar através do if, se meu
arquivo estiver vazio?", então é necessário, antes de mais nada, dizer
que aqui o if não testa condição, ele testa instrução. Quem testa condição
é o cmd test e os operadores matemáticos e, diga-se de passagem o teu if
[ -e $NOME1 ] é o mesmo que if test -e $NOME1, ou seja [[ ... ]] [ ... ]
são formas mais modernas do cmd test e prefiro a primeira.
Uma vez dito isso vamos primeiramente à sua resposta. A forma de vc testar
[[ -s "$NOME1" ]] &&
echo tá vazio # Ihhh! Cadê o if? ;)
1. Coloquei a variável entre aspas pq se $NOME1 tiver espaço, dá zebra;
2. Pode ser que $NOME1 tenha dado, mas o backup foi mal feito. Aí a
melhor coisa a fazer é usar o cmd md5.
​Bom fim de semana para todos.​
Abcs,
Julio
*​Damos treinamento em sua empresa por *
*um preço, no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*
​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Srs,
Criei o script de backup abaixo que envia um e-mail para meu usuário
quando o backup falha ou tem sucesso com mensagens diferentes, o problema é
que simulei um teste alterando a senha do meu root do mysql e os arquivos
foram gerados vazios;
Surgiu uma duvida, existe alguma forma de eu analisar através do if, se
meu arquivo estiver vazio?
#!/bin/sh
#Autor: Rodrigo da Silva Cunha
# Backupmysql.sh
DATA=`/bin/date +%Y%m%d`
# NOME armazena o nome do arquivo de backup, neste caso
# o diretório é /home/workstation/backup, configure aqui o seu
# variáveis do Script
HOST="localhost"
USER="root"
PASSWORD=$(cat /root/.mysqlpass)
DATABASE1="my_wiki"
DATABASE2="forum"
NOME1="/mnt/HD2/backup/db/mysql.$DATABASE1.$DATA.bkp"
NOME2="/mnt/HD2/backup/db/mysql.$DATABASE2.$DATA.bkp"
echo iniciando backups Mysql $DATA >> /var/log/backup.registro.log
mysqldump -h $HOST -u $USER -p$PASSWORD --opt $DATABASE1 > $NOME1
2>>/var/log/backup.registro.log
mysqldump -h $HOST -u $USER -p$PASSWORD --opt $DATABASE2 > $NOME2
2>>/var/log/backup.registro.log
#Envio de Email
if [ -e $NOME1 ]
then
echo "mysql bpk $DATABASE1" | mutt -s "Backup na base de dados
else
echo "PROBLEMA bpk $DATABASE1" | mutt -s "PROBLEMA de Backup na
fi
if [ -e $NOME2 ]
then
echo "mysql bpk $DATABASE2" | mutt -s "Backup na basede de dados
else
echo "PROBLEMA bpk $DATABASE2" | mutt -s "PROBLEMA de Backup na base
fi
#FIM
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
Rodrigo Cunha rodrigo.root.rj@gmail.com [shell-script]
2017-02-04 20:08:50 UTC
Permalink
srs.
Fiz um teste rapido para deixar meu ambiente funcionando e ficou assim.
Testarei, em momento oportuno as opções apresentadas...muito grato a
todos!!!
script:

#!/bin/sh
#Autor: Rodrigo da Silva Cunha
# Backupmysql.sh
DATA=`/bin/date +%Y%m%d`
# NOME armazena o nome do arquivo de backup, neste caso
# o diretório é /home/workstation/backup, configure aqui o seu
# variáveis do Script
HOST="localhost"
USER="root"
PASSWORD=$(cat /root/.mysqlpass)
DATABASE1="my_wiki"
DATABASE2="forum"
NOME1="/mnt/HD2/backup/db/mysql.$DATABASE1.$DATA.bkp"
NOME2="/mnt/HD2/backup/db/mysql.$DATABASE2.$DATA.bkp"
echo iniciando backups Mysql $DATA >> /var/log/backup.registro.log
mysqldump -h $HOST -u $USER -p$PASSWORD --opt $DATABASE1 > $NOME1
2>>/var/log/backup.registro.log
mysqldump -h $HOST -u $USER -p$PASSWORD --opt $DATABASE2 > $NOME2
2>>/var/log/backup.registro.log

#Envio de Email
if [ -e $NOME1 ] && [ -s $NOME1 ]
then
echo "mysql bpk $DATABASE1" | mutt -s "Backup na base de dados
$DATABASE1 executado com sucesso" ***@gmail.com
else
echo "PROBLEMA bpk $DATABASE1" | mutt -s "PROBLEMA de Backup na
$DATABASE1" ***@gmail.com
fi

if [ -e $NOME2 ] && [ -s $NOME2 ]
then
echo "mysql bpk $DATABASE2" | mutt -s "Backup na basede de dados
$DATABASE2 executado com sucesso" ***@gmail.com
else
echo "PROBLEMA bpk $DATABASE2" | mutt -s "PROBLEMA de Backup na base de
dados $DATABASE2" ***@gmail.com
fi
#FIM
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Obrigado srs!
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
Fala Rodrigo,
Vc perguntou: " existe alguma forma de eu analisar através do if, se meu
arquivo estiver vazio?", então é necessário, antes de mais nada, dizer
que aqui o if não testa condição, ele testa instrução. Quem testa condição
é o cmd test e os operadores matemáticos e, diga-se de passagem o teu if
[ -e $NOME1 ] é o mesmo que if test -e $NOME1, ou seja [[ ... ]] [ ... ]
são formas mais modernas do cmd test e prefiro a primeira.
Uma vez dito isso vamos primeiramente à sua resposta. A forma de vc
[[ -s "$NOME1" ]] &&
echo tá vazio # Ihhh! Cadê o if? ;)
1. Coloquei a variável entre aspas pq se $NOME1 tiver espaço, dá zebra;
2. Pode ser que $NOME1 tenha dado, mas o backup foi mal feito. Aí a
melhor coisa a fazer é usar o cmd md5.
​Bom fim de semana para todos.​
Abcs,
Julio
*​Damos treinamento em sua empresa por *
*um preço, no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*
​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Srs,
Criei o script de backup abaixo que envia um e-mail para meu usuário
quando o backup falha ou tem sucesso com mensagens diferentes, o problema é
que simulei um teste alterando a senha do meu root do mysql e os arquivos
foram gerados vazios;
Surgiu uma duvida, existe alguma forma de eu analisar através do if, se
meu arquivo estiver vazio?
#!/bin/sh
#Autor: Rodrigo da Silva Cunha
# Backupmysql.sh
DATA=`/bin/date +%Y%m%d`
# NOME armazena o nome do arquivo de backup, neste caso
# o diretório é /home/workstation/backup, configure aqui o seu
# variáveis do Script
HOST="localhost"
USER="root"
PASSWORD=$(cat /root/.mysqlpass)
DATABASE1="my_wiki"
DATABASE2="forum"
NOME1="/mnt/HD2/backup/db/mysql.$DATABASE1.$DATA.bkp"
NOME2="/mnt/HD2/backup/db/mysql.$DATABASE2.$DATA.bkp"
echo iniciando backups Mysql $DATA >> /var/log/backup.registro.log
mysqldump -h $HOST -u $USER -p$PASSWORD --opt $DATABASE1 > $NOME1
2>>/var/log/backup.registro.log
mysqldump -h $HOST -u $USER -p$PASSWORD --opt $DATABASE2 > $NOME2
2>>/var/log/backup.registro.log
#Envio de Email
if [ -e $NOME1 ]
then
echo "mysql bpk $DATABASE1" | mutt -s "Backup na base de dados
else
echo "PROBLEMA bpk $DATABASE1" | mutt -s "PROBLEMA de Backup na
fi
if [ -e $NOME2 ]
then
echo "mysql bpk $DATABASE2" | mutt -s "Backup na basede de dados
else
echo "PROBLEMA bpk $DATABASE2" | mutt -s "PROBLEMA de Backup na base
fi
#FIM
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
'Ernander (Nander)' ernander@gmail.com [shell-script]
2017-02-05 08:33:15 UTC
Permalink
Ou tra coisa Seria vc testar a Saida Dos comandos mysqldump, se eles forem
executados com Sucesso OK se nao ele alerta.
ops...correção, agora que notei que o -s tem os dois checks...rs.
Falha nossa!vlw!
-s FILE
FILE exists and has a size greater than zero
Post by Rodrigo Cunha ***@gmail.com [shell-script]
srs.
Fiz um teste rapido para deixar meu ambiente funcionando e ficou assim.
Testarei, em momento oportuno as opções apresentadas...muito grato a
todos!!!
#!/bin/sh
#Autor: Rodrigo da Silva Cunha
# Backupmysql.sh
DATA=`/bin/date +%Y%m%d`
# NOME armazena o nome do arquivo de backup, neste caso
# o diretório é /home/workstation/backup, configure aqui o seu
# variáveis do Script
HOST="localhost"
USER="root"
PASSWORD=$(cat /root/.mysqlpass)
DATABASE1="my_wiki"
DATABASE2="forum"
NOME1="/mnt/HD2/backup/db/mysql.$DATABASE1.$DATA.bkp"
NOME2="/mnt/HD2/backup/db/mysql.$DATABASE2.$DATA.bkp"
echo iniciando backups Mysql $DATA >> /var/log/backup.registro.log
mysqldump -h $HOST -u $USER -p$PASSWORD --opt $DATABASE1 > $NOME1
2>>/var/log/backup.registro.log
mysqldump -h $HOST -u $USER -p$PASSWORD --opt $DATABASE2 > $NOME2
2>>/var/log/backup.registro.log
#Envio de Email
if [ -e $NOME1 ] && [ -s $NOME1 ]
then
echo "mysql bpk $DATABASE1" | mutt -s "Backup na base de dados
else
echo "PROBLEMA bpk $DATABASE1" | mutt -s "PROBLEMA de Backup na
fi
if [ -e $NOME2 ] && [ -s $NOME2 ]
then
echo "mysql bpk $DATABASE2" | mutt -s "Backup na basede de dados
else
echo "PROBLEMA bpk $DATABASE2" | mutt -s "PROBLEMA de Backup na base
fi
#FIM
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Obrigado srs!
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
Fala Rodrigo,
Vc perguntou: " existe alguma forma de eu analisar através do if, se
meu arquivo estiver vazio?", então é necessário, antes de mais nada,
dizer que aqui o if não testa condição, ele testa instrução. Quem testa
condição é o cmd test e os operadores matemáticos e, diga-se de passagem o
teu if [ -e $NOME1 ] é o mesmo que if test -e $NOME1, ou seja [[ ...
]] [ ... ] são formas mais modernas do cmd test e prefiro a primeira.
Uma vez dito isso vamos primeiramente à sua resposta. A forma de vc
[[ -s "$NOME1" ]] &&
echo tá vazio # Ihhh! Cadê o if? ;)
1. Coloquei a variável entre aspas pq se $NOME1 tiver espaço, dá
zebra;
2. Pode ser que $NOME1 tenha dado, mas o backup foi mal feito. Aí a
melhor coisa a fazer é usar o cmd md5.
​Bom fim de semana para todos.​
Abcs,
Julio
*​Damos treinamento em sua empresa por *
*um preço, no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*
​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Em 4 de fevereiro de 2017 13:48, Rodrigo Cunha
Post by Rodrigo Cunha ***@gmail.com [shell-script]
Srs,
Criei o script de backup abaixo que envia um e-mail para meu usuário
quando o backup falha ou tem sucesso com mensagens diferentes, o problema é
que simulei um teste alterando a senha do meu root do mysql e os arquivos
foram gerados vazios;
Surgiu uma duvida, existe alguma forma de eu analisar através do if,
se meu arquivo estiver vazio?
#!/bin/sh
#Autor: Rodrigo da Silva Cunha
# Backupmysql.sh
DATA=`/bin/date +%Y%m%d`
# NOME armazena o nome do arquivo de backup, neste caso
# o diretório é /home/workstation/backup, configure aqui o seu
# variáveis do Script
HOST="localhost"
USER="root"
PASSWORD=$(cat /root/.mysqlpass)
DATABASE1="my_wiki"
DATABASE2="forum"
NOME1="/mnt/HD2/backup/db/mysql.$DATABASE1.$DATA.bkp"
NOME2="/mnt/HD2/backup/db/mysql.$DATABASE2.$DATA.bkp"
echo iniciando backups Mysql $DATA >> /var/log/backup.registro.log
mysqldump -h $HOST -u $USER -p$PASSWORD --opt $DATABASE1 > $NOME1
2>>/var/log/backup.registro.log
mysqldump -h $HOST -u $USER -p$PASSWORD --opt $DATABASE2 > $NOME2
2>>/var/log/backup.registro.log
#Envio de Email
if [ -e $NOME1 ]
then
echo "mysql bpk $DATABASE1" | mutt -s "Backup na base de
else
echo "PROBLEMA bpk $DATABASE1" | mutt -s "PROBLEMA de Backup na
fi
if [ -e $NOME2 ]
then
echo "mysql bpk $DATABASE2" | mutt -s "Backup na basede de
else
echo "PROBLEMA bpk $DATABASE2" | mutt -s "PROBLEMA de Backup na
fi
#FIM
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
PY2YP py2yp@py2yp.com [shell-script]
2017-02-04 22:03:50 UTC
Permalink
Boa noite,




Este é meu primerio post neste grupo. Sou programador amador, isto é,
faço apenas alguns bacalhaus para uso próprio e estou com um probleminha
que entendo ser simples, mas estou apanhando:


Tenho um arquivo com datas no formato AAAAMMDD: 19110720 e horas no
formato HHMM: 1911


Preciso substituir 1911 por 2011 no campo data sem alterar o campo hora


O script precisa percorrer linha por linha e só alterar os dados, isto
é, os 4 primeiros dígitos das strings que contiverem 8 digitos ignorando
os demais dados numéricos da linha.


Antecipadamente grato por qualquer ajuda.


Cesar
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2017-02-05 12:14:41 UTC
Permalink
Com certeza o grupo vai lhe dar dezenas de soluções distintas para fazer
isso. Vou dar uma, que é usando o cmd sed:

$ sed 's/^..../2011/' <<< 19110720
20110720

Ou:

$ sed -r 's/^.{4}/2011/' <<< 19110720
20110720

Em ambos usei Expressões Regulares (que precisas aprender, pois servem para
todas as linguagens), onde o circunflexo marca o início da linha e o ponto
significa qq caractere. O Número entre chaves é a qdt de vezes que o átomo
anterior (no caso o ponto - qq caractere) ocorre.

Abcs,
Julio

*​Damos treinamento em sua empresa por *
*um preço, no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*

​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Best Sellers​ ​*​laureados ​sobre os temas. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Post by PY2YP ***@py2yp.com [shell-script]
Boa noite,
Este é meu primerio post neste grupo. Sou programador amador, isto é,
faço apenas alguns bacalhaus para uso próprio e estou com um probleminha
Tenho um arquivo com datas no formato AAAAMMDD: 19110720 e horas no
formato HHMM: 1911
Preciso substituir 1911 por 2011 no campo data sem alterar o campo hora
O script precisa percorrer linha por linha e só alterar os dados, isto
é, os 4 primeiros dígitos das strings que contiverem 8 digitos ignorando
os demais dados numéricos da linha.
Antecipadamente grato por qualquer ajuda.
Cesar
itamarnet@yahoo.com.br [shell-script]
2017-02-05 12:47:15 UTC
Permalink
Cesar

O mestre Julio deu respostas considerando que são os primeiros 4 caracteres de todas as linhas, mas eu entendi que são os 4 primeiros dígitos de um conjunto de 8 dígitos que pode estar em uma parte da linha.
Normalmente para que não haja interpretações errÎneas é bom mostrar um exemplo das linhas de entradas e a saídas desejadas.

Se há campos específicos de dados qual seria o separador ou se os limites são posicionais.

Em experiências que já tive, anos que terminam com 70 até 99 o começo consideramos como 19 e abaixo disso o começo é 20, por exempo: ano 71 é traduzido como 1971 e 65 como 2065. É o seu caso?

A minha sugestão se baseia numa extrapolação do que o mester Julio propÎs, mas sendo mais específico na formação da data:

$ sed 's/19\([0-9]\{2\}[0-1][0-9][0-3][0-9]\)/20\1/' <<< 19110720
20110720

ou

$ sed -r 's/19([0-9]{2}[0-1][0-9][0-3][0-9])/20\1/' <<< 19110720
20110720

Isso confere? Ajuda no seu caso?

[]'s
Itamar
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2017-02-05 13:14:52 UTC
Permalink
Booouua Itamar, li rápido e nem pensei nisso.

Abcs,
Julio

*​Damos treinamento em sua empresa por *
*um preço, no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*

​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Best Sellers​ ​*​laureados ​sobre os temas. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Post by ***@yahoo.com.br [shell-script]
Cesar
O mestre Julio deu respostas considerando que são os primeiros 4
caracteres de todas as linhas, mas eu entendi que são os 4 primeiros
dígitos de um conjunto de 8 dígitos que pode estar em uma parte da linha.
Normalmente para que não haja interpretações errÎneas é bom mostrar um
exemplo das linhas de entradas e a saídas desejadas.
Se há campos específicos de dados qual seria o separador ou se os limites
são posicionais.
Em experiências que já tive, anos que terminam com 70 até 99 o começo
consideramos como 19 e abaixo disso o começo é 20, por exempo: ano 71 é
traduzido como 1971 e 65 como 2065. É o seu caso?
A minha sugestão se baseia numa extrapolação do que o mester Julio propÎs,
$ sed 's/19\([0-9]\{2\}[0-1][0-9][0-3][0-9]\)/20\1/' <<< 19110720
20110720
ou
$ sed -r 's/19([0-9]{2}[0-1][0-9][0-3][0-9])/20\1/' <<< 19110720
20110720
Isso confere? Ajuda no seu caso?
[]'s
Itamar
PY2YP py2yp@py2yp.com [shell-script]
2017-02-05 15:00:48 UTC
Permalink
Antes de mais nada muito obrigado ao Júlio e a você pelas respostas. As
linhas têm esta forma:

<DATE>19110203<TIME>1911<CALL>ZC4A

O script substituiria os 4 primeiros dígitos após <DATE>

Cesar
Post by ***@yahoo.com.br [shell-script]
Cesar
O mestre Julio deu respostas considerando que são os primeiros 4
caracteres de todas as linhas, mas eu entendi que são os 4 primeiros
dígitos de um conjunto de 8 dígitos que pode estar em uma parte da linha.
Normalmente para que não haja interpretações errÎneas é bom mostrar um
exemplo das linhas de entradas e a saídas desejadas.
Se há campos específicos de dados qual seria o separador ou se os
limites são posicionais.
Em experiências que já tive, anos que terminam com 70 até 99 o começo
consideramos como 19 e abaixo disso o começo é 20, por exempo: ano 71
é traduzido como 1971 e 65 como 2065. É o seu caso?
A minha sugestão se baseia numa extrapolação do que o mester Julio
$ sed 's/19\([0-9]\{2\}[0-1][0-9][0-3][0-9]\)/20\1/' <<< 19110720
20110720
ou
$ sed -r 's/19([0-9]{2}[0-1][0-9][0-3][0-9])/20\1/' <<< 19110720
20110720
Isso confere? Ajuda no seu caso?
[]'s
Itamar
itamarnet@yahoo.com.br [shell-script]
2017-02-05 20:12:03 UTC
Permalink
Cesar

Não sei o quanto esta familiarizado com o uso do sed, mas como se identificou como amador tentarei ser mais didático sem intenção de ofendê-lo.

Nesse caso a sugestão que enviei é uma opção, mas não a única, e a do Júlio só não serve pela interpretação diferente do caso, mas normalmente as soluções do mestre são "matadoras"

No lugar do segundo exemplo que mostrei:

$ sed -r 's/19([0-9]{2}[0-1][0-9][0-3][0-9])/20\1/' <<< 19110720

Use:

$ sed -r 's/19([0-9]{2}[0-1][0-9][0-3][0-9])/20\1/' SEU_ARQUIVO

dessa forma as alterações serão exibidas na saída padrão, que normalmente é a tela.

Se precisar jogar essas alterações em outro arquivo pode redirecionar a saida dessa forma:

$ sed -r 's/19([0-9]{2}[0-1][0-9][0-3][0-9])/20\1/' SEU_ARQUIVO > NOVO_ARQUIVO

Se a intenção é modificar no arquivo original, pode usar o parâmetro '-i'

$ sed -i -r 's/19([0-9]{2}[0-1][0-9][0-3][0-9])/20\1/' SEU_ARQUIVO

Mas se precisar alterar no original, mas quer ter um backup do original sem modificações pode especificar junto um sufixo junto ao parâmetro '-i'.
Por exemplo guardar o original com a extensão '.ori'

$ sed -i.ori -r 's/19([0-9]{2}[0-1][0-9][0-3][0-9])/20\1/' SEU_ARQUIVO

Essa é um das formas mais com Sed para esse caso, mas há outras opções usando o Sed mesmo, ou outra ferramenta


Em todos os casos acima, o trecho: 's/19([0-9]{2}[0-1][0-9][0-3][0-9])/20\1/'

no seu caso poderia ser também: 's/DATE>19/DATE>20/'

Obs.: Esse regra dever ser modificada caso haja a questão dos anos 70, se o valor for acima ou abaixo, como mencionei no e-mail anterior.

Isso lhe ajuda?


[]'s
Itamar
PY2YP py2yp@py2yp.com [shell-script]
2017-02-05 21:04:53 UTC
Permalink
Muitíssimo obrigado Itamar,

Esclareceu muito e resolveu.

Fico lendo os posts desta lista porque aqui se aprende muito e quanto
mais detalhada a explicação melhor fica o entendimento, ao que agradeço
muito.

A idade já chegando aos 70, me fez pensar em aprender shell ao invés de
ir jogar dominó na pracinha.

Mais uma vez obrigado.

[]'s Cesar
Post by ***@yahoo.com.br [shell-script]
Cesar
Não sei o quanto esta familiarizado com o uso do sed, mas como se
identificou como amador tentarei ser mais didático sem intenção de
ofendê-lo.
Rodrigo Cunha rodrigo.root.rj@gmail.com [shell-script]
2017-02-05 21:33:37 UTC
Permalink
Cesar, pra eu entender melhor, as strings tem essa natureza:

19110720:1911
19110721:1911
19110722:1911
19110723:1911
19110724:1911

Ou tem outro formato?
Post by PY2YP ***@py2yp.com [shell-script]
Muitíssimo obrigado Itamar,
Esclareceu muito e resolveu.
Fico lendo os posts desta lista porque aqui se aprende muito e quanto mais
detalhada a explicação melhor fica o entendimento, ao que agradeço muito.
A idade já chegando aos 70, me fez pensar em aprender shell ao invés de ir
jogar dominó na pracinha.
Mais uma vez obrigado.
[]'s Cesar
Cesar
Não sei o quanto esta familiarizado com o uso do sed, mas como se
identificou como amador tentarei ser mais didático sem intenção de
ofendê-lo.
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
PY2YP py2yp@py2yp.com [shell-script]
2017-02-05 21:51:11 UTC
Permalink
Boa tarde Rodrigo

O formato é este:

<DATE>19110203<TIME>1911<CALL>ZC4A

Cesar
Post by Rodrigo Cunha ***@gmail.com [shell-script]
19110720:1911
19110721:1911
19110722:1911
19110723:1911
19110724:1911
Ou tem outro formato?
Muitíssimo obrigado Itamar,
Esclareceu muito e resolveu.
Fico lendo os posts desta lista porque aqui se aprende muito e
quanto mais detalhada a explicação melhor fica o entendimento, ao
que agradeço muito.
A idade já chegando aos 70, me fez pensar em aprender shell ao
invés de ir jogar dominó na pracinha.
Mais uma vez obrigado.
[]'s Cesar
Post by ***@yahoo.com.br [shell-script]
Cesar
Não sei o quanto esta familiarizado com o uso do sed, mas como se
identificou como amador tentarei ser mais didático sem intenção
de ofendê-lo.
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
Rodrigo Cunha rodrigo.root.rj@gmail.com [shell-script]
2017-02-05 22:21:22 UTC
Permalink
vlw!
Vou tentar manipular e se der certo coloco o resultado aqui...abração!
Post by PY2YP ***@py2yp.com [shell-script]
Boa tarde Rodrigo
<DATE>19110203<TIME>1911<CALL>ZC4A
Cesar
19110720:1911
19110721:1911
19110722:1911
19110723:1911
19110724:1911
Ou tem outro formato?
Post by PY2YP ***@py2yp.com [shell-script]
Muitíssimo obrigado Itamar,
Esclareceu muito e resolveu.
Fico lendo os posts desta lista porque aqui se aprende muito e quanto
mais detalhada a explicação melhor fica o entendimento, ao que agradeço
muito.
A idade já chegando aos 70, me fez pensar em aprender shell ao invés de
ir jogar dominó na pracinha.
Mais uma vez obrigado.
[]'s Cesar
Cesar
Não sei o quanto esta familiarizado com o uso do sed, mas como se
identificou como amador tentarei ser mais didático sem intenção de
ofendê-lo.
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil
phfbettega@yahoo.com.br [shell-script]
2017-02-06 13:32:39 UTC
Permalink
Olá Cesar, sem dúvida shell script é melhor que dominó pra manter a massa cinzenta ativa.
Talvez shell script perca pro domninó no quesito interação social rs.
Se vc tiver oportunidade (ou se ainda não comprou), compre os livros do Aurélio e do Mestre Julio,
inclusive o livro do Julio tem letras grandes que facilitam bastante a leitura. Eu li por um bom
tempo sem óculos.
Abraços Paulo
Post by PY2YP ***@py2yp.com [shell-script]
Muitíssimo obrigado Itamar,
Esclareceu muito e resolveu.
Fico lendo os posts desta lista porque aqui se aprende muito e quanto mais detalhada a explicação melhor fica
o entendimento, ao que agradeço muito.
A idade já chegando aos 70, me fez pensar em aprender shell ao invés de ir jogar dominó na pracinha.
Mais uma vez obrigado.
[]'s Cesar
Post by ***@yahoo.com.br [shell-script]
Cesar
Não sei o quanto esta familiarizado com o uso do sed, mas como se identificou como amador tentarei ser mais
didático sem intenção de ofendê-lo.
--------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2017-02-06 14:19:00 UTC
Permalink
Cesar, então estamos quites esse foi o meu ano do 69 e faço 70 em Abril. Ou
seja, não somos garotos de programa mas somos senhores de programa.

Dou uma força para depois do shell, vc aprender a usar suas interfaces
gráficas, principalmente o yad.

Abcs,
Julio

*​Damos treinamento em sua empresa por *
*um preço, no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*

​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Best Sellers​ ​*​laureados ​sobre os temas. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Post by ***@yahoo.com.br [shell-script]
Olá Cesar, sem dúvida shell script é melhor que dominó pra manter a massa
cinzenta ativa.
Talvez shell script perca pro domninó no quesito interação social rs.
Se vc tiver oportunidade (ou se ainda não comprou), compre os livros do
Aurélio e do Mestre Julio,
inclusive o livro do Julio tem letras grandes que facilitam bastante a
leitura. Eu li por um bom
tempo sem óculos.
Abraços Paulo
Post by PY2YP ***@py2yp.com [shell-script]
Muitíssimo obrigado Itamar,
Esclareceu muito e resolveu.
Fico lendo os posts desta lista porque aqui se aprende muito e quanto
mais detalhada a explicação melhor fica
Post by PY2YP ***@py2yp.com [shell-script]
o entendimento, ao que agradeço muito.
A idade já chegando aos 70, me fez pensar em aprender shell ao invés de
ir jogar dominó na pracinha.
Post by PY2YP ***@py2yp.com [shell-script]
Mais uma vez obrigado.
[]'s Cesar
Post by ***@yahoo.com.br [shell-script]
Cesar
Não sei o quanto esta familiarizado com o uso do sed, mas como se
identificou como amador tentarei ser mais
Post by PY2YP ***@py2yp.com [shell-script]
Post by ***@yahoo.com.br [shell-script]
didático sem intenção de ofendê-lo.
----------------------------------------------------------
----------------------------------------------------------
Loading...