현재 다음 코드가 있습니다.
cat /proc/cpuinfo | grep "MHz" | cut -d ':' -f2 | sed 's/.*/Core NUM&Mhz/'
출력은 다음과 같습니다(8개 코어의 경우).
Core NUM 1941.054Mhz
Core NUM 1949.820Mhz
Core NUM 2022.734Mhz
Core NUM 1877.171Mhz
Core NUM 1938.265Mhz
Core NUM 1945.703Mhz
Core NUM 1845.562Mhz
Core NUM 1781.546Mhz
내가 하고 싶은 것은 "Core NUM"을 실제 숫자(예: Core 0, Core 1, Core 2, Core 3...)로 바꾸는 것입니다. 이 명령 솔루션의 나머지 부분과 함께 한 줄에서 수행할 수 있는 솔루션을 선호합니다. , 하지만 결국 bash 스크립트로 작업하게 되므로 여러 줄/스크립트 솔루션도 마음에 들지 않습니다. 가장 큰 문제는 grep이 여러 라인을 출력하는 명령이라는 점인데, for 루프나 while 루프에서 라인을 하나씩 찾을 수 있는 방법이 있는지 모르겠습니다.
그럼 어떻게 해야 하나요?
답변1
awk
우리가 당신을 위해 모든 것을 해보자 :
</proc/cpuinfo awk -F : '/MHz/{printf "Core %d%sMhz\n", n++, $2}'
답변2
cat /proc/cpuinfo | awk '/MHz/ {print "Core", i++, $NF "Mhz"}'
주어진,
Core 0 800.000Mhz
Core 1 800.000Mhz
답변3
약간 다른 버전의 awk를 만들었지만 awk에 익숙해지면 이 문제에 대한 자연스러운 해결책이 됩니다. 나는 다음을 사용했습니다 :
cat /proc/cpuinfo | awk -F : '/^processor/ { x = $2 } /^cpu MHz/ { print "CPU" x ":" $2 " MHz" }'
"프로세서" 필드의 값을 저장한 다음 CPU MHz 필드가 발견될 때 이를 호출하는 약간 다른 접근 방식을 사용합니다. 관심 있는 필드가 마지막에 나타나는 것을 알고 있다면 이 방법으로 좀 더 일반적인 작업을 수행할 수 있습니다. 이 경우 "cpu MHz"가 "processor" 필드 뒤에 오는 것을 알고 있으므로 "cpu MHz"가 발견되면 변수 x에 저장된 값이 정확할 것임을 알 수 있습니다.
출력은 다음과 같습니다.
CPU 0: 887.597 MHz
CPU 1: 818.359 MHz
CPU 2: 887.597 MHz
CPU 3: 803.222 MHz