แปลง sysuptime ของ linux เป็นรูปแบบวันที่อย่างดี


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 สำหรับการขึ้นบรรทัดใหม่จะดี!
ankit7540

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

ปรับส่วนที่เกี่ยวข้องของคำตอบนี้

ตราบใดที่ uptime ของคุณน้อยกว่าหนึ่งปีคุณสามารถใช้คำสั่งต่อไปนี้:

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

ฉันแยกฟิลด์แรกของไฟล์ uptime เนื่องจากอย่างน้อยบน Linux ของฉันมีฟิลด์ที่สองที่มีเวลาว่างทั้งหมด ฉันถือว่าเป็นจำนวนวินาทีตั้งแต่ยุคแล้วแปลงเป็นวันของปีตามด้วยเวลาเป็นชั่วโมงนาทีและวินาที ตั้งแต่วันที่ปีเริ่มต้นที่หนึ่งฉันลบหนึ่งจากนั้นใน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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.