명령 출력에서 ​​숫자를 추출하는 방법은 무엇입니까?

명령 출력에서 ​​숫자를 추출하는 방법은 무엇입니까?

2.60다음 문자열(다른 명령의 출력 lscpu) 에서만 인쇄하는 명령을 어떻게 작성할 수 있습니까 ?

model name      : Intel(R) Xeon(R) CPU E5-2690 v4 @ 2.60GHz

답변1

@<whitespaces>GHzline 으로 시작하는 줄과 줄 끝의 줄 사이에 숫자를 인쇄하고 싶다고 가정해 보겠습니다 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.60이 되도록 하려면 다음을 사용할 수 있습니다 .

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첫 번째(유일한) 캡처링 그룹입니다.

관련 정보