कनवर्ट करें linux sysuptime को अच्छी तरह से फॉर्मेट की तारीख


11

मैं /proc/uptimeअच्छी तरह से प्रारूप में प्रदर्शित करना चाहता हूं :

DD:HH:MM:SS

/proc/uptime मुझे सेकंड में सिस्टम का समय दें, क्या कोई मानक समाधान है जो सेकंड को इस प्रारूप में परिवर्तित करता है?

जवाबों:


15

यहाँ एक तरीका है बिना perl:

awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}' /proc/uptime

1
बहुत बढ़िया जवाब। \n के लिए newline अच्छा होगा!
अंकित .५४०

4

आप इसे उदाहरण के लिए perl और कुछ सरल गणित के साथ कर सकते हैं:

cat /proc/uptime |  perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d:%02d\n",int($1/86400),int(($1%86400)/3600),int(($1%3600)/60),$1%60' 

यदि आपको सेकंड की आवश्यकता नहीं है, तो आप बस uptimeकमांड चला सकते हैं । तब इसका उत्पादन केवल DD: HH: MM में बदल सकता है।

उदाहरण के लिए उपयोग (इस तरह से काम करता है यदि केवल uptime> 1h)

 uptime | perl -ne '/(\d*) day[^\d]*(\d*):(\d*)/ ; printf "%02d:%02d:%02d\n", $1, $2, $3'

3

नहीं, क्योंकि यह वास्तव में एक कठिन समस्या नहीं है। दिनों की संख्या प्राप्त करने के लिए पूर्णांक विभाजन का उपयोग करके 86400 से सेकंड की संख्या को विभाजित करें। शेष को ले लो और विभाजित करें कि 3600 से घंटे की संख्या प्राप्त करें। मिनटों की संख्या प्राप्त करने के लिए शेष को 60 से विभाजित करें, और आप सेकंड की संख्या के साथ छोड़ दिए जाते हैं। यह सब शेल का उपयोग करके exprकमांड से किया जा सकता है यदि आपका शेल प्राचीन रूप से अंकगणित का समर्थन नहीं करने के लिए पर्याप्त है

अवधि के बाद सेकंड की संख्या ले रहा है और एक मानव पठनीय तारीख में तब्दील हो कि है एक कठिन समस्या है, और इसलिए वहाँ ऐसा करने के लिए, उदाहरण के लिए मानक तरीके हैं date -r SECONDSखोल से। लेकिन यह एक अलग समस्या है।


3

इस उत्तर के प्रासंगिक भाग को अपनाना ।

जब तक आपका अपटाइम एक वर्ष से कम का नहीं हो जाता, तब तक आप निम्न कमांड का उपयोग कर सकते हैं:

TZ=UTC date -d@$(cut -d\  -f1 /proc/uptime) +'%j %T' | awk '{print $1-1"d",$2}'

मैं अपटाइम फ़ाइल के पहले क्षेत्र को निकालता हूं, क्योंकि कम से कम मेरे लिनक्स पर, कुल निष्क्रिय समय वाला दूसरा क्षेत्र है। मैं उस अवधि के बाद से सेकंड की संख्या के रूप में मानता हूं, और उस दिन के दिन को घंटों, मिनटों और सेकंडों में बदल देता हूं। चूंकि वर्ष का दिन एक पर शुरू होता है, मैं अपने अंतिम awkआह्वान में उस से एक घटाता हूं ।


2
$ s=12345678
$ printf '%d:%02d:%02d:%02d\n' $((s/86400)) $((s/3600%24)) $((s/60%60)) $((s%60))
142:21:21:18

एक तिथि और समय के लिए युग के बाद से परिवर्तित सेकंड:

$ gdate -d @1234567890 '+%F %T' # GNU date
2009-02-14 01:31:30
$ date -r 1234567890 '+%F %T' # BSD date
2009-02-14 01:31:30
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.