У меня есть файл, содержащий всего две строки, со следующей структурой:
$ 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.