Deixa awk
fazer tudo por você:
</proc/cpuinfo awk -F : '/MHz/{printf "Core %d%sMhz\n", n++, $2}'
Atualmente tenho este código:
cat /proc/cpuinfo | grep "MHz" | cut -d ':' -f2 | sed 's/.*/Core NUM&Mhz/'
Que gera o seguinte (para 8 núcleos):
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
O que eu quero fazer é substituir "Core NUM" por números reais (por exemplo, Core 0, Core 1, Core 2, Core 3 ...) Eu preferiria uma solução que pudesse ser feita em uma linha com o restante Este comando, mas desde que eu estou no final trabalhando a partir de um script bash, eu não me importo com uma solução multi-line / script. O maior problema, eu acho, é que o grep é um comando que gera muitas linhas, e eu não sei se há uma maneira de direcionar essas linhas uma por uma em algo como um loop for ou while.
Então, como posso fazer isso?
cat /proc/cpuinfo | awk '/MHz/ {print "Core", i++, $NF "Mhz"}'
dá,
Core 0 800.000Mhz
Core 1 800.000Mhz
Eu fiz uma versão awk ligeiramente diferente, mas uma vez que você esteja familiarizado com o awk, ele se destacará como a solução natural para isso. Eu usei o seguinte:
cat /proc/cpuinfo | awk -F : '/^processor/ { x = $2 } /^cpu MHz/ { print "CPU" x ":" $2 " MHz" }'
que usa uma abordagem um pouco diferente de salvar o valor do campo 'processador' e, em seguida, recuperá-lo quando o campo cpu MHz é encontrado. Você pode fazer coisas um pouco mais gerais dessa maneira, desde que saiba em qual dos campos você está interessado. Neste caso, sabemos que o 'cpu MHz' vem depois do campo 'processador', então sabemos que quando 'cpu MHz' é encontrado, o valor armazenado na variável x estará correto.
A saída parece:
CPU 0: 887.597 MHz
CPU 1: 818.359 MHz
CPU 2: 887.597 MHz
CPU 3: 803.222 MHz