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 改行が良いでしょう!
ankit7540 2016

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

この回答の関連部分を適応させる。

稼働時間が1年未満である限り、次のコマンドを使用できます。

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

少なくともLinuxでは、合計アイドル時間を含む2番目のフィールドがあるため、稼働時間ファイルの最初のフィールドを抽出します。私はそれをエポックからの秒数として扱い、それを年の日、時間、分、秒の時間に変換します。年間通算日は1から始まるので、最後のawk呼び出しではその日から1を引きます。


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.