Grep оставшуюся часть строки.....после совпадения

Grep оставшуюся часть строки.....после совпадения

У меня есть файл, содержащий всего две строки, со следующей структурой:

$ cat /tmp/pwpower.log
000D6F0000D34227, -114.10
000D6F0001A405C4, -130.09

Значения — это значения мощности моей солнечной электростанции. Отрицательное значение означает генерацию.

Мне нужны значения, извлеченные через grep/sed/awk - любой самый умный способ. Мне нужно, чтобы оба значения были извлечены отдельно и без знака минус.

То, что я делаю сейчас, немного глупо, но это работает - я уверен, что многие из вас найдут для меня более умные способы :-) Здесь, конечно, я вижу только значения «плюс-минус».

Чтобы получить первое значение:

cat /tmp/pwpower.log |grep -o "\-.*" | head -n 1

Чтобы получить второе значение:

cat /tmp/pwpower.log |grep -o "\-.*" | tail -n1

И связанный с этим вопрос: есть ли простой способ взять эти СТРОКИ и преобразовать так, чтобы я мог вычислить СУММУ?

решение1

Все значения:

$ 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

решение2

Вы можете использовать cutдля выбора 2-го столбца чисел и paste -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

решение3

Подход KISS

$ awk '{print -$2; t+=-$2}; END{print t}' pwpower.log 
114.1
130.09
244.19

решение4

[root@ip-10-186-149-181 ~]# cut -d '-' -f2 /tmp/pwpower.log | paste -sd+ | bc
244.19

Это позволит выполнить расчет без минуса.

Я думаю, что cut в целом быстрее, чем awk.

Связанный контент