由于更改 uptime 命令的输出,无法获取第 n 列数据

由于更改 uptime 命令的输出,无法获取第 n 列数据

下面是 Solaris 正常运行时间的输出,我在其中提取了倒数第三列:

uptime
8:30pm  up 23 day(s), 17:46,  5 users,  load average: **2.79**, 1.79, 1.53

我总是需要得到上面以粗体突出显示的倒数第三列,即2.79

echo '8:30pm  up 23 day(s), 17:46,  5 users,  load average: 2.79, 1.79, 1.53' | awk '{ print substr($10, 1, length($10)-1) }'

Output:
2.79

但有时,当正常运行时间输出出现18 hr(s)而不是17:46如下所示时,它会失败:

echo '8:44pm  up 23 day(s), 18 hr(s),  5 users,  load average: 1.08, 1.12, 1.22' | awk '{ print substr($10, 1, length($10)-1) }'

Output:
average

一个简单的解决方案可以是搜索最后一列减去 3 的列,即倒数第三列,因为最后三列始终是数字并且不会改变。但是,我不确定如何操作。

你能建议一下吗?

答案1

阅读man cut并执行以下操作:

uptime  | cut -d, -f4 | cut -d: -f2

答案2

你可以尝试一下这个。

awk -F ':' '{ print 0+substr($NF, 1, -1+index($NF,","))}'

答案3

要始终获得倒数第三列,您需要做的就是从行尾向后计数,而不是从行首向前计数:

awk '{print $(NF-2)+0}'

例如:

$ echo '8:30pm  up 23 day(s), 17:46,  5 users,  load average: 2.79, 1.79, 1.53' | awk '{print $(NF-2)+0}'
2.79

$ echo '8:44pm  up 23 day(s), 18 hr(s),  5 users,  load average: 1.08, 1.12, 1.22' | awk '{print $(NF-2)+0}'
1.08

相关内容