問題は、HPCのジョブ数を計算したいのですが、これが基本機能の1つではないことです。だから私はこのように単純なスクリプトを作成しました。
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ずつ減らす必要がありますか?
よろしくお願いします!
答え1
squeue
- オプションを使用すると、ヘッダー行を表示しないことがあります-h
。これにより、最初の行を削除する必要がなくなります。
~からSquue のマニュアルページ:
-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 +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