web-dev-qa-db-ja.com

プロセッサのモデル名を取得するにはどうすればよいですか?

Conky configを作成していますが、統計の1つとしてCPUモデルを表示したいと思います。これには、CPU名だけを文字列として出力するコマンドが必要です(たとえば、「Intel Core i7 7700K」)。 /proc/cpuinfolscpuからの出力の両方に必要なものがあると思います(少し効率が良いのでlscpuを好むでしょう)が、モデル名は4スペース離れていますメーカー名。したがって、model name:文字列を切り取り、余分なスペースを取り除く必要があります。 @ (clockspeed)を取り除く方法も知りたいです。

6
Haxalicious
$ lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU  Z3735F

ノート

  • -n要求するまで何も出力しない
  • -r EREを使用
  • /Model name/Model nameで行を見つけます
  • s/old/new/oldnewに置き換えます
  • .*:\s*コロン、コロン、および任意の量の水平スペースの前のすべて
  • (.*) @' @'の前に任意の数の文字を保存します
  • \1保存されたパターンへの参照
  • p編集した行のみを印刷します

二重スペースを取り除くには、追加のsコマンドを実行できます。

$ lscpu | sed -nr '/Model name/ s/  / /g; s/.*:\s*(.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU Z3735F

どこにも3つ以上のスペースがある場合は機能しないため、複数のスペースを容赦なく削除するには、sedループを使用します。

$ lscpu | sed -nr ':a;s/  / /;ta; /Model name/ s/.*: (.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU Z3735F 

この:a;s/ / /;taは、二重スペースがどこにもなくなるまでストリームの処理を続けます。アドレスを受け取らないことに注意してください。そのため、行を選択する前に、ストリーム全体をかじる必要がありました。 lscpuの出力のみを解析している場合、これには目立った時間がかかりませんが、巨大なファイルまたは複数のファイルでは、かなり遅くなる可能性があります。代わりに、ストリーム全体での作業を回避するために、ループを使用して、元のコマンドの出力を別のsedにパイプすることができます。

$ lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*/\1/p' | sed ':a;s/  / /;ta'
Intel(R) Atom(TM) CPU Z3735F
14
Zanna

これを使用して、必要なものを取得します。

lscpu | grep "Model name:" | sed -r 's/Model name:\s{1,}//g'

結果:

Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz

または:

lscpu | grep "Model name" | sed -r 's/Model name:\s{1,}(.*) @ .*z\s*/\1/g'

結果:

Intel(R) Core(TM) i5-4210U CPU
2
George Udosen
lscpu | grep 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1'
  • lscpu CPU情報を取得するには
  • grep 'Model name' CPU名を含む行を抽出します。
  • cut -f 2 -d ":":の前の行の一部を削除します。そのため、出力から「Model name:」という部分が削除されます。
  • awk '{$1=$1}1'行の先頭からスペースを削除します。

サンプル出力

$ lscpu | grep 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1'
Intel(R) Pentium(R) CPU N3520 @ 2.16GHz
1
ran