В vim
, использовать
/\(^\|\s\)-c\($\|\s\)
В less
:
/(^|\s)-c($|\s\)
Вы могли использовать isk
и границы слова в энергии, но это также соответствовало бы другим вещам, которые могли бы быть опциями; более безопасно явно искать пробелы.
Все значения:
$ awk -F '[ -]*' '$0=$NF' /tmp/pwpower.log
114.10
130.09
Значение в первой строке:
$ awk -F '[ -]*' 'NR==1{print $NF;exit}' /tmp/pwpower.log
114.10
Значение во второй строке:
$ awk -F '[ -]*' 'NR==2{print $NF;exit}' /tmp/pwpower.log
130.09
Сумма всех значений:
$ awk -F '[ -]*' '{sum+=$NF} END{print sum}' /tmp/pwpower.log
244.19
Вы можете использовать cut
для выбора 2-го столбца чисел и вставить -sd+
для создания серии чисел для сложения. Затем можно использовать инструмент bc
для выполнения вычисления.
$ cut -d',' -f2 pwpower.log | paste -sd+ | bc
-244.19
Выбирает числа из 2-го столбца.
$ cut -d',' -f2 pwpower.log
-114.10
-130.09
Переформатирует их в одну строку со знаком +
между каждым числом:
$ cut -d',' -f2 pwpower.log | paste -sd+
-114.10+ -130.09
Выполняет вычисление:
$ cut -d',' -f2 pwpower.log | paste -sd+ | bc
-244.19
Для получения абсолютного значения:
$ cut -d',' -f2 pwpower.log | sed 's/-//g' | paste -sd+ | bc
244.19
Если формат файла pwpower. log
гарантированно можно попросить cut
сделать опускание знака минус:
$ cut -d'-' -f2 pwpower.log | paste -sd+ | bc
244.19
Подход KISS
$ awk '{print -$2; t+=-$2}; END{print t}' pwpower.log
114.1
130.09
244.19
[root@ip-10-186-149-181 ~]# cut -d '-' -f2 /tmp/pwpower.log | paste -sd+ | bc
244.19
Это сделает вычисление без минуса.
Я думаю, что сокращение быстрее, чем awk, в общем
.awk
является правильным инструментом, но число, вероятно, может быть положительным (верно?), что означает, что вы делаете , а не хотите использовать знак минуса в качестве разделителя полей. Вместо этого используйте запятую в качестве разделителя полей, затем отрицайте каждое значение численно -- awk
автоматически преобразует строки в числа для вас:
$ awk -F, '{ print -$2 }' < /tmp/pwpower.log
114.1
130.09
Если окажется, что есть какие-либо положительные числа, то они выйдут отрицательными. Если вам нужна только сумма, awk
тоже может это сделать:
$ awk -F, '{ sum += -$2 } END { print sum }' < /tmp/pwpower.log
244.19
Суммировать два значения:
(awk -F- '{printf "%s+", $2}' /tmp/pwpower.log; echo 0) | bc -l
Вы можете использовать sed также
$-sed -r 's/[^-]+.(.*)/\1/g' /tmp/pwpower.log
Мне нравится ваша команда grep, но она может быть улучшена, чтобы удалить знак минус, и работать в случаях, когда нет знака минус. Расширенные регулярные выражения, доступные в GNU grep с флагом -E
, позволяют нам более точно сопоставлять число.
Немного эффективнее не использовать cat, а передать имя файла в качестве аргумента первой команде и позволить ему прочитать файл. Также мне кажется, что если вы имеете дело только с первой или последней строкой из файла, то имеет смысл сначала использовать команды head
или tail
, так что вам нужно будет сопоставить только одну строку с grep
.
Первое значение:
$ head -n 1 /tmp/pwpower.log | grep -oE '[0-9\.]+$'
114.10
Последнее значение:
$ tail -n 1 /tmp/pwpower.log | grep -oE '[0-9\.]+$'
130.09
Сумма (командой awk из здесь):
$ grep -oE '[0-9\.]+$' /tmp/pwpower.log | awk '{s+=$1} END {print s}'
244.19