正常运行时间 | awk -F:'{print $NF}' - 这里发生了什么?

正常运行时间 | awk -F:'{print $NF}' - 这里发生了什么?

有人能向我解释一下这里发生了什么吗?

uptime | awk -F: '{print $NF}'
  • -F:字段分隔符
  • $NF:当前行的字段数

我不明白为什么此命令的结果与

uptime | awk -F: '{print $5}'

答案1

选项-F( --field-separator fs)-F:使得:输入字段分隔符

我们可以取一个示例的输出uptime,并将其拆分为以下字段:

 09:03:24 up 32 days,  1:32,  3 users,  load average: 0.04, 0.09, 0.08
 -- -- ----------------- --------------------------- -----------------
 1  2          3                      4                      5

很容易说 1-4 字段本身毫无意义,但第 5 字段给了我们平均负载。但这种方法并不总是有效,因为一小时前它应该是第 4 个字段:

 08:03:24 up 32 days, 32 min, 3 users,  load average: 0.00, 0.00, 0.00
 -- -- --------------------------------------------- -----------------
 1  2                        3                               4

这里,$NF来帮忙吧,因为它总是给出字段的数量:在第一种情况下它等于$5,但在第二种情况下$4

综合起来,| awk -F: '{print $NF}'总是在最后时刻付出一切:

答案2

Esa Jokinen 的解释很好,我给你举了一个例子,在正常运行的情况下不要使用特定的列号(示例来自 MAC 系统)。

$ uptime
16:12  up 25 days,  2:48, 15 users, load averages: 3.41 3.20 3.11

检查有多少个字段。

$ uptime | awk -F: '{print NF}'
4

现在,如果您使用 $NF,它将为您提供所需的结果,但 $5 则不会。

$ uptime | awk -F: '{print $NF}'
3.96 3.31 3.15

-F fs选项将输入字段分隔符定义为正则表达式fs。所以这里:只是一个分隔符来划分列。

相关内容