day1からdayNまでの日付列を含むデータファイルを作成するには?

day1からdayNまでの日付列を含むデータファイルを作成するには?

過去の特定の年から最新、または今日までの列の時間別または日別の時間ステップ日付を生成できるかどうか疑問に思います。より明確にするために、2000-10-10 100から2012-12-31 2400までのデータ列を作成したいと思います。出力ファイルは次のとおりです。

Date 

2000-01-01 100
2000-01-01 200
2000-01-01 300
.
.
.
.
.
2012-12-31 2400

答え1

#!/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

答え2

そして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

そして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

そして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}'

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)}'

DSTが時間を変更する上記のすべてのケースでDSTを時計として使用するタイムゾーンにある場合、一部の時間はスキップまたは2回出力されます。

100から2400までではなく、000から2300まで計算します。

答え3

問題を理解しやすくなるため、次の小さなスクリプトも同様のことができます。

#!/bin/bash

i=1
c=100

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

これが自明であることを願っています。

私は使用しましたが、sleep 5正確に1時間ごとにこの行を生成するには、次のようなものを使用できます。sleep $((60*60))

関連情報