如何跳过输出的第一行?

如何跳过输出的第一行?

问题是,我想计算我在 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

相关内容