Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将SLURM作业墙时间解析为bash变量_Bash_Date_Time_Slurm - Fatal编程技术网

将SLURM作业墙时间解析为bash变量

将SLURM作业墙时间解析为bash变量,bash,date,time,slurm,Bash,Date,Time,Slurm,使用SLURM,我运行命令 squeue -u enter_username 我得到一个表输出,标题如下 JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 我试图捕获作业运行的持续时间。这次我找不到SLURM提供的环境变量来捕获,所以我想我只能解析squeue的输出了。这并不像我想象的那么容易,因为挂钟没有固定的格式。换句话说,它并不总是显示dd HH:MM:SS。如果没有天数,则输出为HH:MM:

使用SLURM,我运行命令

squeue -u enter_username
我得到一个表输出,标题如下

JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
我试图捕获作业运行的持续时间。这次我找不到SLURM提供的环境变量来捕获,所以我想我只能解析squeue的输出了。这并不像我想象的那么容易,因为挂钟没有固定的格式。换句话说,它并不总是显示dd HH:MM:SS。如果没有天数,则输出为HH:MM:SS,如果没有小时,则输出为MM:SS,以此类推

我正在用bash做这件事,我需要捕获dayd和hour HH,并将它们分配给一个变量。当格式是动态的时,我很难做到这一点

为了捕获时间条目,我只需在SLURM bash脚本中执行以下操作

 time_str=$(squeue -u enter_username | grep "$SLURM_JOB_ID" | cut -d "R" -f2- | gawk '{print $1}')

正如我之前所说,时间没有固定的格式。希望有经验的人能提供帮助。

通过阅读squee命令的手册页,您似乎可以通过让squee只输出您需要的信息来简化问题:

squeue -h -j ${jobid} -O timeused 
然后,您的任务就是解析该输出,具体操作如下:

#!/bin/bash

line="-$(squeue -h -j ${jobid} -O timeused)" # Leading '-' aids parsing.

parts=( 0 0 0 0 )
index=3
while [ ${#line} -gt 0 ]; do
  parts[${index}]=${line##*[-:]}
  line=${line%[-:]*}
  ((index--))
done

现在数组${parts[*]}正好包含4个元素,0到3,分别表示天、小时、分钟和秒。

上面@Andrew Vickers给出的解决方案如预期的那样工作。然而,我进一步采取了这一步骤来强制执行固定的2位数格式

index=0
while [ ${index} -lt 4 ]; do
    if [ ${#parts[${index}]} -lt 2 ]; then
        parts[${index}]="0${parts[${index}]}"
    fi
((index++))
done

条件检查可以包含在他的答案中,但他的循环需要调整以格式化所有变量。

我通常认为,在显示输出时格式化输出比在内部存储输出时更好。要使用前导零格式化输出,请使用printf命令:printf%d天,%02d:%02d:%02d${parts[@]}。