문제는 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씩 줄여야 합니까 ?
미리 감사드립니다!
답변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의 정렬 형식을 사용할 수도 있습니다.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