2.60
다음 문자열(다른 명령의 출력 lscpu
) 에서만 인쇄하는 명령을 어떻게 작성할 수 있습니까 ?
model name : Intel(R) Xeon(R) CPU E5-2690 v4 @ 2.60GHz
답변1
@<whitespaces>
GHz
line 으로 시작하는 줄과 줄 끝의 줄 사이에 숫자를 인쇄하고 싶다고 가정해 보겠습니다 model name
.
sed -nE 's/^model name.*@[[:space:]]*([.[:digit:]]+)GHz$/\1/p' /proc/cpuinfo
또는 GNU를 사용하십시오 grep
:
grep -Po '^model name.*@\s*\K[.\d]+(?=GHz$)' /proc/cpuinfo
에 대해서는 lscpu
다음도 참조하세요.
lscpu -J | jq -r '
.lscpu[] |
select(.field == "Model name:").data |
match("@\\s*([\\d.]+)GHz$").captures[0].string |
tonumber'
또는:
lscpu -J | jq -r '.lscpu[]|select(.field == "CPU max MHz:").data|tonumber'
모델명의 기본 주파수가 아닌 MHz 단위의 최대 주파수입니다.
답변2
sed
( 대소문자를 구분하지 않는 일치를 위한 플래그 sed
로 GNU)를 사용하십시오 .I
$ lscpu | sed -En 's/^model name.* ([0-9.]+).*/\1/Ip'
2.60
답변3
다음과 같이 시도해 볼 수 있습니다 awk
.
awk '{print int($NF*100)/100.0}' /proc/cpuinfo
awk
이 줄은 다시 작성할 수 있지만 다른 구현에서 이를 어떻게 처리할지 잘 모르겠습니다 .
awk '{print $NF*1.0}' /proc/cpuinfo
2.6
0이 되도록 하려면 다음을 사용할 수 있습니다 .
awk '{printf "%4.2f",int($NF*100)/100.0}' /proc/cpuinfo
다음과 같이 사용하고 싶다면 lscpu
:
lscpu|awk '/odel name/ {print int($NF*100)/100.0}'
답변4
LANG=C lscpu | sed -rn "s/.*Model name.* @ (.*)GHz/\1/p"
LANG=C
언어 설정이 영어로 설정되지 않은 경우 이 옵션이 필요합니다.
sed의 -n은 기본적으로 출력을 억제합니다. -r은 캡처 그룹 입력을 단순화합니다(백슬래시 없이).
조건 A가 충족되면 "s/A/B/p" 명령은 A를 B로 바꾸고 p는 인쇄를 수행합니다(기본적으로 출력을 억제하므로 이것이 필요합니다).
A는 정규 표현식이자 \1
첫 번째(유일한) 캡처링 그룹입니다.