^(?!_) # don't start with _
(?!.*?_$) # don't end with _
[a-zA-Z] # the first character must be a letter
[a-zA-Z0-9_]+$ # after that digits and underscores are ok
Вы выразили двумя различными способами, которыми не должен быть первый символ _
, но ничто здесь ничего не говорит о __
в середине.
Используя отрицательное предвидение, просто выразить “один или несколько алфавитно-цифровых символов или _
, не запускайте с _
или цифра, не заканчивайте _
, и не позволяйте __
anywhwere”:
^(?![0-9_]|.*__.*_$|)[0-9A-Z_a-z]+$
Без отрицательного предвидения (например, в awk или grep -E
), можно разделить части:
^[A-Za-z][0-9A-Za-z]*(_[0-9A-Za-z]+)*$
Начнитесь с буквы, затем обнулите или больше буквенно-цифрового индикатора, затем у Вас могут быть символы нижнего подчеркивания, но каждый должен сопровождаться одним или несколькими буквенно-цифровой индикатор.
Это должно помочь:
(awk '{printf "%s/", $2}' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l
Также вы должны получить загрузку из /proc/loadavg
, где команда uptime
также получит ее.
decimal_places=2
dc <<< "${decimal_places}k $(uptime | awk '{print $11}'| cut -d"," -f1) $(grep -c processor /proc/cpuinfo) /p"
Этот ответ использует $()
в bash, поэтому временные переменные не нужны.
В нем также используется dc, калькулятор. Мы говорим dc о точности, используя k
, затем даем ему 2 числа, затем просим его разделить их и вывести ответ.
Просто делай бэш-скриптинг.
Получите оба значения в 2 разные переменные.
Затем с помощью команды bc
разделите одно от другого. Так же просто.
Ksh и zsh имеют арифметику с плавающей точкой. Другие оболочки, включая bash, имеют только целочисленную арифметику (ограниченную 32 или 64 битами).
Каждая страница man-оболочки имеет раздел, посвященный арифметике. Если вам нужны вычисления с плавающей точкой, то их сложнее найти. Основным способом поиска man-страниц является команда apropos
apropos, которая ищет однострочные описания страниц. Так как вам нужно что-то использовать из оболочки, вам нужен раздел 1. apropos -s 1 float
не обнаруживает ничего релевантного на моей Linux машине. Что в итоге работает, так это
$ apropos -s 1 calculator
bc (1) - An arbitrary precision calculator language
dc (1) - an arbitrary precision calculator
Веб может предложить гораздо больше ресурсов. На первой странице http://www.google.com/search?q=bash+float я нахожу Как делать целочисленные и плавающие вычисления, в bash или других языках/фреймворках? и теперь ваш вопрос (а также несколько потоков Stack Overflow). http://www.google.com/search?q=bash+division дает мне несколько SO потоков, вторым из которых является как я могу получить деление стека на float в bash?. Вы также можете искать на Unix Stack Exchange, который имеет вопросительный тег bash калькулятор, а теперь также floating-point: Как выполнять целочисленные и с плавающей точкой вычисления, на bash или других языках/фреймворках?
Общим выбором для вычислений с плавающей точкой или больших целочисленных вычислений является bc
. Это классическая утилита Unix, которая была стандартизирована.
Другой стандартной утилитой, которая может выполнять вычисления с плавающей точкой и с которой, возможно, легче начать, чем с прецизионной моделью bc, является awk. Несмотря на то, что awk в первую очередь предназначен для обработки текста, он также может выполнять вычисления с плавающей запятой.