3 अंकों की लंबाई सुनिश्चित करने के लिए पैडिंग डे / टाइम मान


2

मेरे पास एक स्क्रिप्ट है जो प्रारूप में टाइमस्टैम्प को प्रस्तुत करती है YYYY'DDD'TTT जहां Y = वर्ष, D = 365 में से दिन और 1000 वें दिन में T = समय:

#!/bin/bash
clear
s=$(($(date +"%H*3600+%M*60+%S")))
t=$(($s * 5 / 432))
d=$(date +%j)
y=$(date +%Y)
printf "$y\`$d\`$t" "$y" "$d" "$t"

लेकिन मुझे इसे संशोधित करने की आवश्यकता है ताकि डी और टी हमेशा तीन-वर्ण मान (अर्थात, 1 जनवरी के लिए '1' के बजाय '001', दिन के पहले मिनट के लिए '1' के बजाय '001') का उत्पादन करें - और मुझे नहीं पता कैसे।

किसी भी मदद बेहद सराहना की है

जवाबों:


4

शायद आप printfप्रारूप स्ट्रिंग पर एक नज़र डाल सकते हैं । पहले पैरामीटर में printfएक प्रारूप स्ट्रिंग होनी चाहिए जिसमें प्रत्येक तर्क के लिए प्लेसहोल्डर शामिल हैं जो पालन करते हैं।

आप शामिल कर सकते हैं %dपर हस्ताक्षर किए दशमलव प्रारूप में एक बहस का प्रतिनिधित्व करने, और आप कर सकते हैं उपसर्ग dद्वारा 0nलिए nशून्य गद्दी के पात्रों।

printf "%d/%d/%d" 2011 2 3

उत्पादन करेगा 2011/2/3

printf "%04d/%03d/%05d" 2011 2 45

आउटपुट चाहिए 2011/002/00045


धन्यवाद! यह मदद करता है, लेकिन मेरी असली समस्या यह है कि मैं सिर्फ अतिरिक्त शून्य नहीं डाल सकता, क्योंकि पहले 99 मान (दिन, ect) के बाद, मूल्य अपने आप में एक तीसरा चरित्र प्राप्त करता है। मेरी स्क्रिप्ट को एक शून्य के साथ 100 मानों की आवश्यकता है, और मान <10 दो शून्य के साथ, यदि यह समझ में आता है ...
जैक एंडर्स

1
यही प्रिंटफ "% 03d" कर रहा है। '3' न्यूनतम चौड़ाई है और '0' का अर्थ न्यूनतम चौड़ाई भरने के लिए शून्य वर्ण ('0') के साथ पैड बनाना है। उन उदाहरणों को देखें जिन्हें डिजिटेलियन ने दिया था। ध्यान दें कि "2011" में कोई शून्य नहीं जोड़ा गया था, क्योंकि यह न्यूनतम चौड़ाई से मिलता था।
Arcege

2

dateकाम करने दो !

date +%3j

फिर, सहस्राब्दी भाग के लिए, एक साधारण चाल 1000 से अधिक गणना करने के लिए है 1। तो अपनी स्क्रिप्ट के लिए:

s=$(($(date +"%H*3600+%M*60+%S")))
t=$(($s * 5 / 432 + 1000))
date "+%Y'%3j'${t#1}"

अकेले तारीख का उपयोग करने के लिए , +1, लेकिन जैसा कि दिखाया गया है, शून्य-पैडिंग के बिना 2011-01-01 00:02उत्पादन करता है 2011'001'1.... यहाँ एक t=00$(($(($(date +"%H*3600+%M*60+%S"))) * 5 / 432)); date "+%Y'%3j'${t:(-3)}"
ट्विस्टेड

@ उफ, अच्छा स्थान। मैंने नंबर को पेड करने के अधिक पोर्टेबल तरीके से संपादित किया है।
गाइल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.