Tengo un archivo que contiene sólo dos líneas, con la siguiente estructura:
$ cat /tmp/pwpower.log
000D6F0000D34227, -114.10
000D6F0001A405C4, -130.09
Los valores son valores de potencia de mi planta solar. Valor negativo significa generación.
Necesitaría los valores extraídos mediante grep/sed/awk, cualquiera que sea la forma más inteligente. Necesito extraer ambos valores por separado y sin el signo menos.
Lo que hago ahora es un poco estúpido pero funciona. Estoy seguro de que muchos de ustedes tendrán formas más inteligentes para mí :-) Aquí, por supuesto, solo veo los valores más Menos.
Para obtener el primer valor:
cat /tmp/pwpower.log |grep -o "\-.*" | head -n 1
Para obtener el segundo valor:
cat /tmp/pwpower.log |grep -o "\-.*" | tail -n1
Y una pregunta relacionada: ¿existe una forma sencilla de tomar estas CADENAS y transformarlas para poder calcular la SUMA?
Respuesta1
Todos los valores:
$ awk -F '[ -]*' '$0=$NF' /tmp/pwpower.log
114.10
130.09
Valor en primera línea:
$ awk -F '[ -]*' 'NR==1{print $NF;exit}' /tmp/pwpower.log
114.10
Valor en la segunda línea:
$ awk -F '[ -]*' 'NR==2{print $NF;exit}' /tmp/pwpower.log
130.09
Suma de todos los valores:
$ awk -F '[ -]*' '{sum+=$NF} END{print sum}' /tmp/pwpower.log
244.19
Respuesta2
Puede utilizar cut
para seleccionar la segunda columna de números y paste -sd+
crear una serie de números para sumar. bc
Luego se puede utilizar la herramienta para realizar el cálculo.
$ cut -d',' -f2 pwpower.log | paste -sd+ | bc
-244.19
Cómo funciona
Selecciona los números de la segunda columna.
$ cut -d',' -f2 pwpower.log
-114.10
-130.09
Los vuelve a formatear en una sola línea con un +
signo entre cada número:
$ cut -d',' -f2 pwpower.log | paste -sd+
-114.10+ -130.09
Realiza el cálculo:
$ cut -d',' -f2 pwpower.log | paste -sd+ | bc
-244.19
Para obtener el valor absoluto:
$ cut -d',' -f2 pwpower.log | sed 's/-//g' | paste -sd+ | bc
244.19
Si el formato del archivo pwpower.log
está garantizado, puede cut
omitir el signo menos:
$ cut -d'-' -f2 pwpower.log | paste -sd+ | bc
244.19
Respuesta3
Un enfoque BESO
$ awk '{print -$2; t+=-$2}; END{print t}' pwpower.log
114.1
130.09
244.19
Respuesta4
[root@ip-10-186-149-181 ~]# cut -d '-' -f2 /tmp/pwpower.log | paste -sd+ | bc
244.19
Esto hará el cálculo sin el menos.
Creo que cortar es más rápido que awk, en general.