【问题标题】:How can I manipulate a specific output in Bash (uptime)?如何操作 Bash 中的特定输出(正常运行时间)?
【发布时间】:2019-06-12 13:52:41
【问题描述】:

所以不久前我一直在试验 Bash,我想操纵“uptime”命令的输出。例如,如果正常运行时间为 5 分钟,我设法将 up x 分钟的输出更改为 0:05,但其余的东西都消失了。

我应该使用什么方法来显示时间、用户数量及其平均负载,而不影响我当前的正常运行时间输出。

这是所需的输出:21:08:13 up 0:10,3 个用户,平均负载:0.30、0.30、0.25

任何帮助将不胜感激!

since="`uptime --since`"
start="`date --date "$since" '+%s'`"
now="`date '+%s'`"
sec=$((now-start))

days=$((sec/(60*60*24)))
sec=$((sec-days*(60*60*24)))

hr=$((sec/(60*60)))
sec=$((sec-hr*(60*60)))

min=$((sec/60))
sec=$((sec-min*60))

rest="$(uptime | perl -npe'{s/(.*,\s+)(\d+\s+user)/$2/}')"

printf "%d(days), %02d:%02d:%02d(hms), %s\n" $days $hr $min $sec "$rest"

电流输出

0(days), 00:34:00(hms), 3 users, load average: 0.09, 0.14, 0.14

【问题讨论】:

    标签: linux bash uptime


    【解决方案1】:

    使用您的输出到一个名为 date 的文件中,我尝试了这个:

    cat date | awk '{print $1 " "  $2 " "  0 ":"  $3  "," $5 " " $6 " " $7 " " $8 " " $9 " " $10 " " $11}'
    
    21:08:13 up 0:10,4 users, load average: 0.30, 0.30, 0.25
    

    【讨论】:

      【解决方案2】:

      这可能是一种只使用正常运行时间、日期,当然还有 bash 的方式:

      #!/bin/bash
      
      since="`uptime --since`"
      start="`date --date "$since" '+%s'`"
      now="`date '+%s'`"
      sec=$((now-start))
      
      days=$((sec/(60*60*24)))
      sec=$((sec-days*(60*60*24)))
      
      hr=$((sec/(60*60)))
      sec=$((sec-hr*(60*60)))
      
      min=$((sec/60))
      sec=$((sec-min*60))
      
      printf "%d(days), %02d:%02d:%02d(hms)\n" $days $hr $min $sec
      

      【讨论】:

      • 好的,这确实可以部分工作。但是正常运行时间输出中缺少以下几行:21:08:13,4 个用户,平均负载:0.30、0.30、0.25。但这只是给出正常运行时间的具体输出
      猜你喜欢
      • 1970-01-01
      • 2015-11-13
      • 2013-09-02
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多