Discussion:
[shell-script] Validação de datas
PY2YP py2yp@py2yp.com [shell-script]
2017-11-08 15:52:27 UTC
Permalink
Olá pessoal,

Tenho um arquivo CSV com as linhas como abaixo:
3XY3D,2015/10/19,2015/10/31,AF094

O segundo e o terceiro campo são datas iniciais e finais no formato
aaaa/mm/dd.

Preciso validar as datas para que não ocorram erros como abaixo
3XY3D,2015/13/19,2015/10/31,AF094 ou
3XY3D,2015/09/30,2015/09/21,AF094 (neste caso data final ocorreu antes
da inicial) ou
3XY3D,2015/09/31,2015/10/31,AF094


Para saída, basta apontar "erro" na linha em que este ocorra:
3XY3D,2015/09/31,2015/10/31,AF094 erro.


Antecipadamente muito obrigado.
--
Cesar
Jonathan Lessa jonathanlessa@gmail.com [shell-script]
2017-11-08 16:04:27 UTC
Permalink
o comando date -d "12/07/2012" testa se essa é uma data válida, o padrão é
"mm/dd/aaaa"

A expressão abaixo testa o timestamp das datas informadas:
(( $(date -d "12/12/2012" +%s) < $(date -d "12/17/2012" +%s) )) && echo
"Segunda maior" || echo "Primeira maior ou igual"
Post by PY2YP ***@py2yp.com [shell-script]
Olá pessoal,
3XY3D,2015/10/19,2015/10/31,AF094
O segundo e o terceiro campo são datas iniciais e finais no formato
aaaa/mm/dd.
Preciso validar as datas para que não ocorram erros como abaixo
3XY3D,2015/13/19,2015/10/31,AF094 ou
3XY3D,2015/09/30,2015/09/21,AF094 (neste caso data final ocorreu antes
da inicial) ou
3XY3D,2015/09/31,2015/10/31,AF094
3XY3D,2015/09/31,2015/10/31,AF094 erro.
Antecipadamente muito obrigado.
--
Cesar
--
Att.:
Jonathan Lessa
Licenciado em Informática
'py2yp@py2yp.com' py2yp@py2yp.com [shell-script]
2017-11-08 16:13:56 UTC
Permalink
Muito obrigado

Sent from my iPhone
o comando date -d "12/07/2012" testa se essa é uma data válida, o padrão é "mm/dd/aaaa"
(( $(date -d "12/12/2012" +%s) < $(date -d "12/17/2012" +%s) )) && echo "Segunda maior" || echo "Primeira maior ou igual"
Post by PY2YP ***@py2yp.com [shell-script]
Olá pessoal,
3XY3D,2015/10/19,2015/10/31,AF094
O segundo e o terceiro campo são datas iniciais e finais no formato
aaaa/mm/dd.
Preciso validar as datas para que não ocorram erros como abaixo
3XY3D,2015/13/19,2015/10/31,AF094 ou
3XY3D,2015/09/30,2015/09/21,AF094 (neste caso data final ocorreu antes
da inicial) ou
3XY3D,2015/09/31,2015/10/31,AF094
3XY3D,2015/09/31,2015/10/31,AF094 erro.
Antecipadamente muito obrigado.
--
Cesar
--
Jonathan Lessa
Licenciado em Informática
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2017-11-08 16:45:55 UTC
Permalink
$ (($(sed -r 's/[^,]+,(.*),.*/\1/; s|/||g; s/,/-/' <<<
3XY3D,2015/09/30,2015/09/21,AF094) > 0)) && echo Data final \< inicial

Onde:

- ((...)) - servem para chamar o interpretador aritmético do Bash;
- O sed está dividido em 3 partes:


1. s/[^,]+,(.*),.*/\1/ - Deixa somente as datas separadas por virgula;
2. s|/||g - Mata as barras (/) ficando as dtas com formato AAAMMDD;
3. s/,/-/ - Troca a vírgula entre as datas por um sinal de subtração.


- Se o resultado for positivo, isto é, a date inicial for maior que a
final, será dada a msg de erro

Tb poderia, de uma forma menos elegante, ser feito assim:
$ (( $(cut -f2,3 -d, <<< 3XY3D,2015/09/30,2015/09/21,AF094 | tr -d / | tr
, -) > 0)) && echo Data final \< inicial

Shell é muuuuuito econÎmico!! ;)

OBS: A inscrição no curso de Shell em EAD começa hj, preço promocional por
ser a 1a. turma (pode inclusive parcelar em 10 vezes ou -15% no boleto).
Detalhes em www.dicas-l.com.br


*Novidade!* Dia 08/11​ abriremos as inscrições para um treinamento
de Shell Script que será lecionado em 5 semanas no formato EAD
e que será ministrado por Julio Neves e Rubens Queiroz (dicas-l)
Todos os detalhes em:
http://www.dicas-l.com.br/programacao-shell-linux/resultados_enquete.php.

* Atenção! Últimos treinamentos presenciais do ano! *
Cidade Local Período
Brasilia LinuxSolutions <http://bit.ly/cursoshelljulioneves> 27/11-01/12
São Paulo 4Linux
<https://www.4linux.com.br/curso/programacao-em-shell-script> 05-09/12
Rio de Janeiro LinuxSolutions <http://bit.ly/cursoshelljulioneves> 11-15/12

*Damos treinamento em sua empresa **com certificado*
*e nota fiscal **por **um preço, **no mínimo, 50% mais*
*barato que qualquer curso.*
Post by PY2YP ***@py2yp.com [shell-script]
Olá pessoal,
3XY3D,2015/10/19,2015/10/31,AF094
O segundo e o terceiro campo são datas iniciais e finais no formato
aaaa/mm/dd.
Preciso validar as datas para que não ocorram erros como abaixo
3XY3D,2015/13/19,2015/10/31,AF094 ou
3XY3D,2015/09/30,2015/09/21,AF094 (neste caso data final ocorreu antes
da inicial) ou
3XY3D,2015/09/31,2015/10/31,AF094
3XY3D,2015/09/31,2015/10/31,AF094 erro.
Antecipadamente muito obrigado.
--
Cesar
PY2YP py2yp@py2yp.com [shell-script]
2017-11-08 17:35:42 UTC
Permalink
Muito obrigado Júlio.

--
Cesar
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
$ (($(sed -r 's/[^,]+,(.*),.*/\1/; s|/||g; s/,/-/' <<<
3XY3D,2015/09/30,2015/09/21,AF094) > 0)) && echo Data final \< inicial
* ((...)) - servem para chamar o interpretador aritmético do Bash;
1. s/[^,]+,(.*),.*/\1/ - Deixa somente as datas separadas por virgula;
2. s|/||g - Mata as barras (/) ficando as dtas com formato AAAMMDD;
3. s/,/-/ - Troca a vírgula entre as datas por um sinal de subtração.
* Se o resultado for positivo, isto é, a date inicial for maior que a
final, será dada a msg de erro
$ (( $(cut -f2,3 -d,  <<< 3XY3D,2015/09/30,2015/09/21,AF094 | tr -d / |
tr , -) > 0)) && echo Data final \< inicial
Shell é muuuuuito econÎmico!! ;)
Continue reading on narkive:
Loading...