다음 코드를 수정해야 합니다. 이 코드는 특정 노드에서 사용 가능한 코어 수를 결정하도록 설계되었습니다.
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를 살펴보세요.