Como adicionar um prefixo diferente a cada linha em uma saída do grep?

1

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?

    
por Cestarian 02.03.2016 / 13:39

3 respostas

5

Deixa awk fazer tudo por você:

</proc/cpuinfo awk -F : '/MHz/{printf "Core %d%sMhz\n", n++, $2}'
    
por 02.03.2016 / 13:47
3

cat /proc/cpuinfo | awk '/MHz/ {print "Core", i++, $NF "Mhz"}' dá,

Core 0 800.000Mhz
Core 1 800.000Mhz
    
por 02.03.2016 / 13:47
3

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
    
por 03.03.2016 / 00:01

Tags