有人能向我解释一下这里发生了什么吗?
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
。所以这里:
只是一个分隔符来划分列。