2013-03-25 8 views
7

में प्रिंट दिनांक दिनांक मैं लिनक्स के लिए नया हूं। मैं दी गई तिथि सीमा में दिनांक कैसे प्रिंट और स्टोर कर सकता हूं।दिनांक सीमा लिनक्स

उदाहरण के लिए मेरे पास startdate = 2013-03-01 और enddate = 2013-03-25 है; मैं उस सीमा में सभी तारीख मुद्रित करना चाहता हूं।

अग्रिम

उत्तर

2

उपयोग date धन्यवाद, सेकंड के लिए अपनी तिथियाँ परिवर्तित एक छोटे से गणित करते हैं और वापस कन्वर्ट करने के लिए:

#/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 देखें ..

11

के रूप में जब तक तारीख 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 

[ ... ] के साथ, इनपुट रीडायरेक्शन ऑपरेटर के साथ भ्रम से बचने के लिए आपको < से बचने की आवश्यकता है।

इसमें प्रारंभ तिथि प्रिंट करने का वार्ट होता है यदि यह समाप्ति तिथि से अधिक है।

+0

तो, सिर्फ 'गूंज" $ curr "' परीक्षण के बाद करते हैं;) । 'date --date" $ curr +1 दिन "' cur cur = .. ' –

+0

से बेहतर है, यह संभवतः थोड़ी देर के लूप के बजाय सुरक्षित होने के बजाय इसे लूप में रखना बेहतर है। यदि आप अपने स्टार्टडेट को पैरामीटरकृत करते हैं और एक स्क्रिप्ट के भीतर समाप्ति करते हैं, तो लूप अधिकतम 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 +" {} "दिन" + "% वाई-% एम-% डी" 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 
संबंधित मुद्दे