Grep resto de la línea.....después del partido

Grep resto de la línea.....después del partido

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 cutpara seleccionar la segunda columna de números y paste -sd+crear una serie de números para sumar. bcLuego 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.logestá garantizado, puede cutomitir 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.

información relacionada