출력의 첫 번째 줄을 건너뛰는 방법은 무엇입니까? [복사]

출력의 첫 번째 줄을 건너뛰는 방법은 무엇입니까? [복사]

문제는 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

관련 정보