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
(唯一の)キャプチャグループです。