2013-03-25 2 views
7

저는 리눅스를 처음 사용합니다. 특정 날짜 범위에서 날짜를 인쇄하고 저장할 수있는 방법은 무엇입니까?날짜 범위에서 날짜 인쇄 리눅스

예를 들어 저는 startdate = 2013-03-01이고 enddate = 2013-03-25입니다. 그 범위의 모든 날짜를 인쇄하고 싶습니다. ..

답변

2

사용 date에서

덕분에, 초 날짜로 변환 약간의 수학을 다시 변환 날짜가 YYYY-MM-DD 형식 인 동안 사전 식으로 비교할 수 있으며 date은 초로 변환하지 않고 달력 계산을 수행합니다.

startdate=2013-03-15 
enddate=2013-04-14 

curr="$startdate" 
while true; do 
    echo "$curr" 
    [ "$curr" \< "$enddate" ] || break 
    curr=$(date +%Y-%m-%d --date "$curr +1 day") 
done 

[ ... ]을 사용하는 경우 <을 이스케이프 처리해야 입력 리디렉션 연산자와 혼동을 피할 수 있습니다.

종료일보다 큰 경우 시작일이 인쇄되는 사마귀가 있습니다.

11

로를

#/bin/bash 

dstart=2013-03-01 
dend=2013-03-25 
# convert in seconds sinch the epoch: 
start=$(date -d$dstart +%s) 
end=$(date -d$dend +%s) 
cur=$start 

while [ $cur -le $end ]; do 
    # convert seconds to date: 
    date [email protected]$cur +%Y-%m-%d 
    let cur+=24*60*60 
done 

날짜 매개 변수에 대한 자세한 정보를 원하시면 man date를 참조하십시오 : 사전

+0

그래서, 단지 시험 후'에코 "$의 CURR를"'할) . 'date --date "$ curr +1 day"는'let cur = ..'보다 더 좋다. –

+0

안전을 위해서 while 루프가 아닌 for 루프에 넣는 것이 더 나을 것이다. 스크립트에서 startdate와 enddate를 매개 변수화하면 최대 366 회 또는 1000 회 반복 실행이 가능합니다. 이것은 무한 루프를 막을 것입니다. – ekangas

5

당신이 '최근'날짜하려면 대체는 다음과 같습니다

echo {100..1} | xargs -I{} -d ' ' date --date={}' days ago' +"%Y-%m-%d" 

는 분명히 임의의 날짜 범위에 대해 작동하지 않습니다.

+0

이것은 제가 생각하기에 가장 좋은 대답입니다. 나는 그걸로 변경했습니다 : $ startdate = '2016-03-01'; 에코 {0..10} | xargs -I {} -d " 'date --date ="$ startdate + "{}"days "+"% Y- % m- % d " 2016-03-01 2016-03-02 2016- 03-03 .... – user5672998

0

또 다른 옵션은 dateutils (http://www.fresse.org/dateutils/#dateseq)에서 dateseq을 사용하는 것입니다

약간 개선
$ dateseq 2013-03-01 2013-03-25 
2013-03-01 
2013-03-02 
2013-03-03 
2013-03-04 
2013-03-05 
2013-03-06 
2013-03-07 
2013-03-08 
2013-03-09 
2013-03-10 
2013-03-11 
2013-03-12 
2013-03-13 
2013-03-14 
2013-03-15 
2013-03-16 
2013-03-17 
2013-03-18 
2013-03-19 
2013-03-20 
2013-03-21 
2013-03-22 
2013-03-23 
2013-03-24 
2013-03-25 
0

버전

#!/bin/bash 
startdate=2013-03-15 
enddate=2013-04-14 

curr="$startdate" 
while true; do 
    [ "$curr" \< "$enddate" ] || { echo "$curr"; break; } 
    echo "$curr" 
    curr=$(date +%Y-%m-%d --date "$curr +1 day") 
done 
관련 문제