【问题标题】:How to read a line starting from the right in the output of uptime? [duplicate]如何在正常运行时间的输出中从右开始读取一行? [复制]
【发布时间】:2020-01-07 17:48:11
【问题描述】:

当我在终端uptime 上发出命令时,它会返回:

13:21:52 到 13:02,3 个用户,平均负载:1.10、1.09、0.96

然后,我想使用以下方法打印字段 8、9、10 的负载平均值:

uptime | awk '{print $8}' | tr -d ","

那么结果将是:1.10

但是,有时,当电脑运行超过一天时,它会返回:

13:22:12 上升 6 天,19:50,3 个用户,平均负载:1.10、1.09、0.96

如您所见,字段列数不是固定的。我不想手动编辑要打印的字段编号。所以,我想从右边开始阅读这条线。这样,0.96 将是字段 0,1.09 将是字段 1,依此类推。我不关心左侧附近的值。

【问题讨论】:

  • 使用awk,您可以使用数学来获取索引号。因此,您可以编写 $(NF-2) 而不是 $8,其中 NF 是一个变量,表示当前行/记录中的字段数。

标签: awk sed


【解决方案1】:

您只需致电awk 即可完成。基本调用是:

uptime | awk '{ print $(NF - 2) }'

要同时去掉逗号而不是使用tr 创建另一个子shell,您可以这样做:

uptime | awk '{ gsub(/,/,""); print $(NF - 2) }'

如果您还有其他问题,请告诉我。

【讨论】:

    【解决方案2】:

    这样你就不用担心uptime的问题了。

    cat /proc/loadavg|awk '{print $1,$2,$3}'
    

    【讨论】:

    • 或者只是awk '{print $1,$2,$3}' /proc/loadavg
    【解决方案3】:

    另一个带有rev 的命令,因为rev 很有趣:

    uptime | rev | cut -d , -f 3 | rev
    

    【讨论】:

      【解决方案4】:

      如果你只是用逗号分割,字段的数量可能会有所不同,但如果你先用冒号分割,再用逗号分割,你感兴趣的数字是最后一组中的第一个字段:

      uptime | cut -d : -f 5 | cut -d , -f 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-20
        • 2015-09-13
        • 2012-12-16
        相关资源
        最近更新 更多