Я написал команду оболочки ниже для вывода тактовой частоты процессора в виде целого числа:
grep -m 1 'cpu MHz' /proc/cpuinfo | grep -o -E '[0-9]+'
ВЫХОД:
900
063
Это потому, что точная тактовая частота составляет 900,063. По сути, я хочу, чтобы команда возвращала часть 900, но не часть после десятичной (.063).
Любая помощь будет высоко оценена, спасибо.
решение1
Это можно было бы сделать проще в awk:
awk -F: '/cpu MHz/ {print int($2); exit}' /proc/cpuinfo
-F:
- разделить на:
/cpu MHz/
на строках, соответствующихcpu MHz
, выполните:{print int($2); exit}'
- преобразовать второе поле в целое число, вывести его и выйти (таким образом, мы получим только первое совпадение)
решение2
Есть много возможностей. Вот еще одна:
grep -m 1 'cpu MHz' /proc/cpuinfo | cut -f2 -d: | cut -f1 -d.
решение3
Ниже находится «Попробуй»
команда
sed -n '/cpu MHz/s/.*://p' /proc/cpuinfo | sed "s/\..*//g"
Метод Awk
awk -F ":" '/cpu MHz/{gsub(/\..*/,"",$NF);print $NF}' /proc/cpuinfo
питон
#!/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]
решение4
С grep
:
grep -om1 'cpu MHz[^.]*' /proc/cpuinfo | grep -o '[[:digit:]]*'
Получите строку без точки и следующих за ней символов, затем grep
для цифр.
Если вы grep
поддерживаете регулярные выражения, совместимые с Perl (PCRE):
grep -oPm1 'cpu MHz.* \K[[:digit:]]+' /proc/cpuinfo
Все, что находится до , \K
сопоставляется как обычно, но не включается в вывод (обратная проверка переменной длины).