#!/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
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
#!/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
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.
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))
Tags text-processing date awk columns