问题是,我想计算我在 HPC 中的工作数量,但这不是现成的功能之一。所以我做了这个简单的脚本
squeue -u user_name | wc -l
其中squeue
打印所有作业,如下所示
> 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)
将通过管道传输到其中wc
并计算行数。然而,第一行不是作业的条目。如何指示wc
在计数时跳过第一行?或者我应该只将 和 的输出wc
减一?
提前致谢!
答案1
squeue
您可以使用- 选项抑制标题行-h
。这将消除删除第一行的需要。
来自squeue 的手册页:
-h, --noheader
Do not print a header on the output.
答案2
有很多方法可以做到这一点,我第一个想到的是:
squeue -u user_name | tail -n +2 | wc -l
从手册页tail
:
-n, --lines=[+]NUM output the last NUM lines, instead of the last 10;
or use -n +NUM to output starting with line NUM
所以你 -n +2 应该跳过第一行。
您还可以使用 tail 的排序形式:tail +2
答案3
只是为了好玩。您可以从 wc 输出中减去 1
echo $(( $(squeue -u user_name|wc -l)-1 ))
或者
squeue -u user_name|wc -l|awk '{print $0-1}'
当你使用 awk 时,你可以用 awk 来计算行数,从而避免 wc
squeue -u user_name|awk 'END{print NR-1}'
END 表示读取完所有行后执行下一个块,NR 表示到目前为止读取的行数。
答案4
实际上有几种方法可以达到相同的结果。另一种方法是将序列命令的输出通过管道传输到 sed,如下所示
squeue -u user_name | sed '1d' | wc -l