Luchando con los comandos GREP, eliminando el punto decimal correctamente

Luchando con los comandos GREP, eliminando el punto decimal correctamente

Escribí el siguiente comando de shell para generar la velocidad del reloj de la CPU como un número entero:

grep -m 1 'cpu MHz' /proc/cpuinfo | grep -o -E '[0-9]+'

PRODUCCIÓN:

900
063

Esto se debe a que la velocidad exacta del reloj es 900.063. Básicamente, quiero que el comando devuelva la parte 900 pero no la parte después del decimal (.063).

Cualquier ayuda es muy apreciada, gracias.

Respuesta1

Esto podría ser más fácil de hacer en awk:

awk -F: '/cpu MHz/ {print int($2); exit}' /proc/cpuinfo
  • -F:- dividido en:
  • /cpu MHz/en líneas coincidentes cpu MHz, haga:
    • {print int($2); exit}'- convierte el segundo campo a un número entero, lo imprime y sale (para que solo obtengamos la primera coincidencia)

Respuesta2

Hay muchas posibilidades. Aqui hay otro más:

grep -m 1 'cpu MHz' /proc/cpuinfo | cut -f2 -d: | cut -f1 -d.

Respuesta3

A continuación se muestra intentar

dominio

sed -n '/cpu MHz/s/.*://p' /proc/cpuinfo | sed "s/\..*//g"

método awk

awk  -F ":" '/cpu MHz/{gsub(/\..*/,"",$NF);print $NF}' /proc/cpuinfo

pitón

#!/usr/bin/python
import re
k=re.compile(r'cpu MHz')
m=open('/proc/cpuinfo','r')
for i in m:
    if re.search(k,i):
        print i.split(":")[-1].split(".")[0]

Respuesta4

Con grep:

grep -om1 'cpu MHz[^.]*' /proc/cpuinfo | grep -o '[[:digit:]]*'

Obtenga la línea sin el punto y los siguientes caracteres, luego greplos dígitos.

Si admite grepexpresiones regulares compatibles con Perl (PCRE):

grep -oPm1 'cpu MHz.* \K[[:digit:]]+' /proc/cpuinfo

Todo lo anterior \Kcoincide como de costumbre, pero no se incluye en la salida (mirada hacia atrás de longitud variable).

información relacionada