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를 시계로 사용하는 시간대에 있는 경우 일부 시간은 건너뛰거나 두 번 출력됩니다.

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정확히 매 시간마다 이 줄을 생성하려면 다음과 같은 것을 사용할 수 있습니다.sleep $((60*60))

관련 정보