如何使用“qstat”和“grep”列出包含一系列数字的行?

如何使用“qstat”和“grep”列出包含一系列数字的行?

为了监控集群中的作业状态,qstat用于输出这样的行

job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID
-----------------------------------------------------------------------------------------------------------------
 146767 2.75000 REMD       xxxxxx      Rr    03/26/2021 10:58:17 [email protected]   160
 146811 2.75000 REMD       xxxxxx      r     03/26/2021 11:37:48 [email protected]   160
 146862 2.25862 REMD       xxxxxx      Rq    03/26/2021 06:24:39                                  160
 146911 2.19397 REMD       xxxxxx      Rq    03/26/2021 11:37:20                                  160
 146768 0.00000 REMD       xxxxxx      hqw   03/13/2021 14:47:35                                  160
 146769 0.00000 REMD       xxxxxx      hqw   03/13/2021 14:47:35                                  160
 146770 0.00000 REMD       xxxxxx      hqw   03/13/2021 14:47:36                                  160

每行的第一个元素是作业 ID。有没有办法显示特定范围的工作,例如如何仅显示从 146868 到 146927 的工作?看来是grep需要的。

答案1

虽然您可以构建正则表达式来匹配一系列数字,但这确实不值得。最好使用一些可以将数字作为数字处理的工具。例如,在 awk 中,这是相当微不足道的。这里,ab分别是下限和上限, 和$1是第一个字段,默认情况下沿空格分割。

$ qstat | awk -v a=146868 -v b=146927 '$1 >= a && $1 <= b {print}'
 146911 2.19397 REMD       xxxxxx      Rq    03/26/2021 11:37:20                                  160

(在 ERE 中,等效的正则表达式类似于146(86[89]|8[789][0-9]|9[01][0-9]|92[0-7]),除非我在那里犯了一个错误,这并非不可能。在 BRE 中,这是不可能的,因为没有替代。)

答案2

我找到了一个简单的解决方案:

qstat | fgrep "$(seq 146868 146927)"

相关内容