我需要修复以下代码。该代码旨在确定给定节点中可用的核心数。
第 1 步:获取核心数
TC=$(grep -c process /proc/cpuinfo)
第 2 步:计算正常运行时间,忽略小数
LA=$(uptime | cut -d ' ' -f 13 | head -c 1)
第 3 步$LA
:从中减去$TC
以获取我可以运行的进程数
procs=$(expr $TC - $LA)
我的问题是第 2 步:当我输入时uptime | cut -d ' ' -f 13 | head -c 1
,我得到了a
。这意味着什么?第2步有错误吗?
让我补充一点,如果我简单地输入,uptime
我会得到
23:17:01 up 38 days, 38 min, 8 users, load average: 0.00, 0.00, 0.00
的输出
uptime
包括几个空格数可变的字段。cut
将每个空格都视为字段分隔符,因此对其中一些值的更改将意味着您cut
将完全拉出不同的数字。例如,用户数是用空格填充的。小于10时,有两个空格;当 10 个或更多时,只有 1 个。
您可以改用
awk
, 它允许每个字段之间有可变数量的空间(并忽略行开头的空间):但是,如果“单词”本身的数量发生变化,这仍然会中断,例如。当正常运行时间本身不是(只是)几天和几分钟时:
因此,该行中的其他标点符号(逗号和冒号)也可以更改,并且对查找所需数字没有帮助。
你可以使用
grep -o ...
to extract only the wordsload average:
onwards,然后从中提取正确的词。但是,如果您的操作系统有这样一个文件,那么uptime
完全停止解析 的输出,而是从 中提取平均负载会简单得多:/proc/loadavg
如果你只想要第一个数字,忽略小数,你可以用一个来做到这一点
cut
:您的剪切命令是剪切第 13 个字段,但您想要第 14 个字段...
在通过你的 cut 命令之后,你会留下 'a' 字符。
尝试:
另请注意,您的 head -c 1 会切断小数点...我认为您可能最好四舍五入或其他东西。也许看看公元前。