下面是 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