У меня есть файл, содержащий только две строки, со следующей структурой:
$ 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
И связанный с этим вопрос, есть ли простой способ взять эти STRING и преобразовать их, чтобы я мог вычислить SUM?
источник
-F-
будет делать.tr -d "- "
сначала.-F-
.Вы можете использовать,
cut
чтобы выбрать 2-й столбец чисел иpaste -sd+
создать серию чисел для сложения. Затем инструментbc
можно использовать для расчета.Как это работает
Выбирает числа из 2-го столбца.
Переформатируйте их в одну строку со
+
знаком между каждым числом:Выполняет расчет:
Чтобы получить абсолютное значение:
Если формат файла
pwpower.log
гарантирован, вы можетеcut
опустить знак минус:источник
Поцелуй подход
источник
Мне нравится ваша команда grep, но ее можно улучшить, удалив знак минус, и работать в тех случаях, когда знак минус отсутствует. Расширенные регулярные выражения, доступные в GNU grep с
-E
флагом, позволяют нам более точно соответствовать числу.Несколько эффективнее не использовать cat, но передать имя файла в качестве аргумента первой команде и позволить ей прочитать файл. Мне также приходит в голову, что если вы имеете дело только с первыми или последними строками файла, имеет смысл сначала использовать команды
head
или,tail
чтобы вам соответствовало только одна строкаgrep
.Первое значение:
Последнее значение:
Сумма (с помощью команды awk отсюда ):
источник
Это сделает расчет без минуса.
Я думаю, что сократить быстрее, чем awk, в общем
источник
awk
это правильный инструмент, но число, вероятно, может быть положительным (верно?), что означает, что вы не хотите использовать знак минус в качестве разделителя полей. Вместо этого используйте запятую в качестве разделителя полей, а затем обнуляйте каждое значение численно -awk
автоматически преобразует строки в числа для вас:Если будут какие-то положительные числа, они получатся отрицательными. Если вы хотите только сумму,
awk
можете сделать это тоже:источник
sqrt($2^2)
как трюк, чтобы получить абсолютное значение.Для суммирования двух значений:
источник
awk
?bc
=)awk
?echo $(cut -d- -f2 file | tr '\n' '+')0 | bc
cut
? Используйте[insert_cmd_here]
вместо этого, создайте петлю подоболочки, придумайте новую математику, используйте человеческий кластер или умственную арифметику, направьте мои мысли вbc
. Почему мы делаем вещи? Нет причин делать мой ответ плохим.Вы также можете использовать Sed
источник