shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Script


From: Alfredo Casanova
Subject: Re: [shell-script] Script
Date: Fri, 01 Jul 2016 15:19:42 +0000


data="">
echo "${data:4:4}${data:2:2}${data:0:2}"
20160630

data="">

echo $data
20160630



On Thu, Jun 30, 2016 at 10:13 AM 'Julio C. Neves' address@hidden [shell-script] <address@hidden> wrote:
 

Fala Douglas,
ontem eu mandei uma resposta para a sua pergunta, mas eu estava em um celular e chegando de 15 horas de viagem sem dormir. Hj, depois de dormir tudo que tinha direito, quero reenviar a minha proposta (que tb é um one-liner), porém agora funcionando, para que vc avalie o tempo tb. Creio que ela será a mais veloz de todas por ser bash puro e por usar somente o interpretador aritmético.

$ Data="">
$ printf '%04d%02d%02d\n' $((Data%10000)) $((Data/10000%100)) $((Data/1000000))
20160630

O sed tb propicia uma resposta bonita, mas não tão veloz.

$ sed -r 's/^(.{2})(.{2})(.*)$/\3\2\1/' <<< $Data

Abcs,
Julio
@juliobash

P
róximos cursos de Shell
Cidade         Local Período
São Paulo 4Linux 25
-29/07
Dou treinamento de Shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.


2016-06-29 13:44 GMT-03:00 Douglas Bussoli Mugnos address@hidden [shell-script] <address@hidden>:
 

Itamar, sua solução é mais adequada para solucionar o problema.Nada como deixar o bash fazer o trabalho sujo né ?!


#A primeira solução
$ time echo $( DDMMAAAA=12101991
> day=$(cut -c1-2 <<< $DDMMAAAA)
> month=$(cut -c3-4 <<< $DDMMAAAA)
> year=$(cut -c5-8 <<< $DDMMAAAA)
> echo $year$month$day)
19911012
real    0m0.033s
user    0m0.003s
sys    0m0.010s

#A primeira solução simplificada
$ time echo $( DDMMAAAA=12101991
> cut -c5-8,3-5,1-2 <<< $DDMMAAAA)
12101991
real    0m0.010s
user    0m0.001s
sys    0m0.002s


#Solução sem utilização do cut
$ time echo $( DDMMAAAA=12101991
> DATAINV=${DDMMAAAA:4}${DDMMAAAA:2:2}${DDMMAAAA:0:2}
> echo $DATAINV)
19911012
real    0m0.001s
user    0m0.000s
sys    0m0.000s


abraço!


2016-06-29 13:18 GMT-03:00 address@hidden [shell-script] <address@hidden>:
 

Raul

Essa solução não serve pois inverte tudo inclusive os números do dia, mês e ano

A solução que o Douglas apresentou é mais adequada e no embalo dela dou meu pitaco:


$ DDMMAAAA=12101991

$ DATAINV=${DDMMAAAA:4}${DDMMAAAA:2:2}${DDMMAAAA:0:2}

$ echo $DATAINV
19911012

É só mais uma sugestão aproveitando apenas o bash

[]'s
Itamar




--
Douglas Bussoli Mugnos  
E-mail : address@hidden 
Telefone  : (19) 9 8117-7277



reply via email to

[Prev in Thread] Current Thread [Next in Thread]