这是问题,我想计算我在 hpc 中的作业数量,但这不是现成的功能之一。所以我做了这个简单的脚本
squeue -u user_name | wc -l
Run Code Online (Sandbox Code Playgroud)
wheresqueue
打印所有作业,如下所示
> squeue -u user_name
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
8840441 theory cteq fxm PD 0:00 1 (Resources)
8840442 theory cteq fxm PD 0:00 1 (Priority)
8840443 theory cteq fxm PD 0:00 1 (Priority)
8840444 theory cteq fxm PD 0:00 1 (Priority)
Run Code Online (Sandbox Code Playgroud)
这将被输送到wc
并计算行数。但是,第一行不是作业的条目。wc
计数时如何指示跳过第一行?或者我应该只取wc
减一的输出?
提前致谢!
Bex*_*Bex 44
您可以从剿标题行squeue
与-h
-option。这将消除删除第一行的需要。
-h, --noheader
Do not print a header on the output.
Run Code Online (Sandbox Code Playgroud)
use*_*469 30
有很多方法可以做到这一点,我首先想到的是:
squeue -u user_name | tail -n +2 | wc -l
Run Code Online (Sandbox Code Playgroud)
从手册页tail
:
-n, --lines=[+]NUM output the last NUM lines, instead of the last 10;
or use -n +NUM to output starting with line NUM
Run Code Online (Sandbox Code Playgroud)
所以你 -n +2 应该跳过第一行。
你也可以使用tail的排序形式: tail +2
只是为了好玩。您可以从 wc 输出中减去 1
echo $(( $(squeue -u user_name|wc -l)-1 ))
Run Code Online (Sandbox Code Playgroud)
或者
squeue -u user_name|wc -l|awk '{print $0-1}'
Run Code Online (Sandbox Code Playgroud)
当您使用 awk 时,您可以使用 awk 计算行数,因此避免使用 wc
squeue -u user_name|awk 'END{print NR-1}'
Run Code Online (Sandbox Code Playgroud)
END 表示,在读取所有行后执行以下块,NR 表示到目前为止读取的行数。