Como imprimir datas entre duas datas diferentes [duplicado]

1

Quero imprimir datas entre duas datas diferentes (por exemplo, data de início e duas datas)

Se a data de início for 2013-09-05 e a data final for 2013-09-10 , quero o resultado como

2013-09-05
2013-09-06
2013-09-07
2013-09-08
2013-09-09 
2013-09-10 

..... etc

Durante o final do mês e início do mês, deve imprimir as datas corretas.

    
por user48204 29.09.2013 / 20:21

2 respostas

2

A maneira mais fácil é usar o comando date . No mundo UNIX, as datas são medidas em segundos desde a época . Se você converter suas datas em segundos, poderá usar date para imprimir as que lhe interessam:

END=$(date -d "2013-09-10" +%s);
DATE=$(date -d "2013-09-05" +%s); 
while [[ "$DATE" -le "$END" ]]; do date -d "@$DATE" +%F; let DATE+=86400; done

Copiar / colar isso no seu terminal deve retornar

2013-09-05
2013-09-06
2013-09-07
2013-09-08
2013-09-09
2013-09-10

As seções relevantes de man date :

   -d, --date=STRING
          display time described by STRING, not 'now'

   %F     full date; same as %Y-%m-%d
    
por 29.09.2013 / 20:44
1

Usando o GNU grep :

grep -A5 "2013-09-05" file

Usando awk :

awk '/2013-09-05/,/2013-09-10/{print}' file

Usando sed :

sed -n '/2013-09-05/,/2013-09-10/p' file

Ou, lendo o comentário, usando o GNU date :

start=2013-09-05 
end=2013-09-11
   while [[ $start < $end ]] 
     do 
      printf "$start\n"; start=$(date -d "$start + 1 day" +"%Y-%m-%d") 
     done
    
por 29.09.2013 / 20:30

Tags