특정 노드에서 사용 가능한 코어 수 찾기

특정 노드에서 사용 가능한 코어 수 찾기

다음 코드를 수정해야 합니다. 이 코드는 특정 노드에서 사용 가능한 코어 수를 결정하도록 설계되었습니다.

1 단계: 코어 수를 가져옵니다.

TC=$(grep -c process /proc/cpuinfo)

2 단계:소수점을 무시한 가동 시간

LA=$(uptime | cut -d ' ' -f 13 | head -c 1)

3단계: 실행할 수 있는 프로세스 수를 얻으 $LA려면 빼세요.$TC

procs=$(expr $TC - $LA)

내 문제는 2단계입니다. 을 입력하면 uptime | cut -d ' ' -f 13 | head -c 1가 표시됩니다 a. 그게 무슨 뜻이야? 2단계에 오류가 있나요?

간단히 입력하면 다음과 같은 uptime결과가 나온다는 점을 추가하겠습니다.

 23:17:01 up 38 days, 38 min,  8 users,  load average: 0.00, 0.00, 0.00

답변1

의 출력에는 uptime가변 개수의 공백이 있는 여러 필드가 포함됩니다. cut환대모든공백은 필드 구분 기호 역할을 하므로 이러한 값 중 일부를 변경하면 cut완전히 다른 숫자를 얻게 됩니다.

예를 들어 사용자 수는 공백으로 채워집니다. 10개 미만이면 공백이 2개이고, 10개 이상이면 공백이 1개입니다.

$ echo ' 23:17:01 up 38 days, 38 min,  8 users,  load average: 0.00, 0.00, 0.00'|cut -d ' ' -f13
average:
$ echo ' 23:17:01 up 38 days, 38 min, 10 users,  load average: 0.00, 0.00, 0.00'|cut -d ' ' -f13
0.00,

대신 을 사용하면 awk각 필드 사이에 가변적인 공간을 허용하고 줄 시작 부분의 공백은 무시합니다.

$ echo ' 23:17:01 up 38 days, 38 min,  8 users,  load average: 0.00, 0.00, 0.00' | awk '{print $11}'

그러나 예를 들어 "단어" 자체의 수가 변경되면 이 문제가 여전히 깨질 수 있습니다. 가동 시간 자체가 며칠, 몇 분 이상인 경우:

 14:51:24 up 4 min,  1 user,  load average: 0.17, 0.16, 0.07
 14:52:09 up 6 days, 21:58, 11 users,  load average: 0.79, 0.84, 0.82

따라서 줄의 다른 구두점(쉼표 및 콜론)도 변경될 수 있으며 원하는 숫자를 찾는 데 도움이 되지 않습니다.

grep -o ...다음 단어들만 추출하여 load average:그 중에서 올바른 단어를 추출 할 수 있습니다 . 그러나 운영 체제에 이러한 파일이 있는 경우 uptime출력 구문 분석을 완전히 중지하고 대신 해당 파일에서 로드 평균을 추출하는 것이 훨씬 간단합니다./proc/loadavg

$ cat /proc/loadavg
1.01 0.91 0.85 1/793 24545

소수점을 무시하고 첫 번째 숫자만 원하는 경우 단일을 사용할 수 있습니다 cut.

$ cut -d. -f1 /proc/loadavg
1

답변2

절단 명령은 13번째 필드를 절단하고 있는데 14번째 필드를 원합니다...

⇨  uptime |cut -d ' ' -f 13
average:

잘라내기 명령을 실행하면 "a" 문자가 표시됩니다.

노력하다:

⇨  uptime |cut -d ' ' -f 14
0.18

또한 head -c 1은 소수점 이하 자릿수를 자릅니다. 반올림 등을 하는 것이 더 나을 것 같습니다. 아마도 BC를 살펴보세요.

관련 정보