如何让Slurm的squeue命令仅以小时显示作业时限?
解决Slurm squeue时限列转为小时数的问题
Slurm的squeue命令本身没有原生选项可以直接将%l指定的时限列从天-时:分:秒格式转换为总小时数,但可以通过管道结合awk工具处理输出来实现需求,同时保留已用时间(%M)的原有格式。
修改后的命令
squeue --format="%.6i %.5P %.25j %.8u %.8T %.10M %.5l %.15b %.5C %.6D %R" --sort=+i --me | awk ' NR==1 {print; next} { # 处理带天的格式(如1-00:00:00) if ($7 ~ /-/) { split($7, time_parts, /[-:]/) total_hours = time_parts[1] * 24 + time_parts[2] } # 处理无天的格式(如02:30:00) else { split($7, time_parts, /:/) total_hours = time_parts[1] } $7 = total_hours print } '
命令说明
- 原squeue命令:保留你原本指定的输出格式、排序规则和仅显示自身作业的参数,确保已用时间(
%M)的格式不变。 - awk处理逻辑:
NR==1 {print; next}:如果是表头行(若squeue输出包含表头),直接打印不做处理。- 针对第7个字段(即时限列):
- 若字段包含
-,说明是天-时:分:秒格式,拆分后天数乘以24加上小时数得到总小时数。 - 若字段仅为
时:分:秒格式,直接提取小时数作为结果。
- 若字段包含
- 替换第7字段为计算后的总小时数,打印整行内容。
效果示例
原输出中的时限列1-00:00:00会被转换为24,已用时间1:14:14保持不变,最终输出类似:
276350 qgpu jobname username RUNNING 1:14:14 24 gres:gpu:v100:1 18 1 s31n02
内容的提问来源于stack exchange,提问作者Armadillo
相关产品推荐
相关产品推荐

