You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Awk统计SLURM作业分配CPU总数时结果不符的问题排查

SLURM CPU总数计算结果错误的排查

我尝试从SLURM的scontrol --details --oneliner show job输出中获取作业分配的CPU总数。CPU ID格式为逗号分隔的列表,可能包含连字符分隔的范围。测试输入为0,2-11,48-58,预期计算结果为22,但运行以下代码后得到40:

echo 0,2-11,48-58 |
awk '
    {
        cpus = 0;
        m = split($0, arr, ",");
        for (j = 1; j <= m; j++)
            cpus += ( idx = index(arr[j], "-") \
                 ? 1 + substr(arr[j], idx+1) - substr(arr[j], 1, idx-1) \
                 : 1 \
            );
        print cpus
    }
'

输出结果:

40

使用的GNU Awk版本为4.2.1, API: 2.0 (GNU MPFR 3.1.6-p2, GNU MP 6.1.2)。


问题根源

代码中的循环条件j &lt;= m使用了HTML转义字符&lt;,而非实际的小于等于符号<=。GNU Awk无法识别&lt;作为比较运算符,会将其视为字符串进行处理,导致循环判断逻辑完全错误——循环不会按预期终止,甚至重复计算数组元素,最终得到错误的CPU总数。

修复方案

将&lt;=替换为实际的<=符号,修改后的代码如下:

echo 0,2-11,48-58 |
awk '
    {
        cpus = 0;
        m = split($0, arr, ",");
        for (j = 1; j <= m; j++)
            cpus += ( idx = index(arr[j], "-") \
                 ? 1 + substr(arr[j], idx+1) - substr(arr[j], 1, idx-1) \
                 : 1 \
            );
        print cpus
    }
'

运行后会得到正确结果:

22

内容的提问来源于stack exchange,提问作者Fravadona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:50:13