como criar um arquivo de dados com uma coluna de data do dia1 ao diaN?

3

Eu queria saber se eu poderia gerar uma data de intervalo de hora por hora ou por dia em uma coluna começando de algum ano no passado até um dia no passado ou hoje. para ser mais claro, eu quero criar uma coluna de dados de 2000-10-10 100 a 2012-12-31 2400. O arquivo de saída será parecido com

Date 

2000-01-01 100
2000-01-01 200
2000-01-01 300
.
.
.
.
.
2012-12-31 2400
    
por AiB 28.08.2013 / 21:22

3 respostas

9

#!/bin/bash

day=2000-01-01
end=2012-12-31

echo Date > output.file

until [[ $day > $end ]]; do
    printf "$day %d\n" $(seq 100 100 2400)
    day=$(date -d "$day + 1 day" +"%Y-%m-%d")
done >> output.file
    
por 28.08.2013 / 22:07
3

com ksh93 :

d1=$(printf '%(%s)T\n' "2000-01-01 01:00:00")
d2=$(printf '%(%s)T\n' "2013-01-01 00:00:00")
for ((d=d1;d<d2;d+=3600)); do
  printf '%(%F %-H%M)T\n' "#$d"
done

com zsh :

zmodload zsh/datetime
strftime -rs d1 '%Y%m%d%H%M' 201201010100
strftime -rs d2 '%Y%m%d%H%M' 201301010000
for ((d=d1;d<d2;d+=3600)) strftime '%F %-H%M' $d

com perl :

perl -MPOSIX -le '
  $d1=mktime 0,0,1,1,0,100;$d2=mktime 0,0,0,1,0,113;
  for ($d=$d1; $d<$d2; $d+=3600) {
    print strftime "%F %-H%M", localtime $d}'

Com o GNU awk :

awk 'BEGIN {d1=mktime("2000 01 01 01 00 00")
            d2=mktime("2013 01 01 00 00 00")
            for (d=d1;d<d2;d+=3600)
              print strftime("%F %-H%M",d)}'

Note que com todos os itens acima em torno do tempo de alteração do horário de verão, algumas horas serão ignoradas ou serão emitidas duas vezes em um fuso horário com horário de verão como um relógio.

Estamos contando de 000 a 2300 em vez de 100 a 2400.

    
por 28.08.2013 / 22:49
2

Como a pergunta ficou mais compreensível, o pequeno script a seguir pode fazer algo semelhante.

#!/bin/bash

i=1
c=100

while ((c>i))
    do
    echo "$(date +%F)" $c >> thisfile
    sleep 5
    echo "$(date +%F)" $((c+=100))
    done

Espero que seja auto-explicativo

Eu usei um sleep 5 , mas para obter exatamente essa linha a cada hora gerada, você pode usar algo como sleep $((60*60))

    
por 28.08.2013 / 21:40