Tengo un archivo que contiene solo 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 a través de grep / sed / awk, cualquiera sea la forma más inteligente. Necesito tener ambos valores extraídos 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, ¿hay una manera simple de tomar estos STRING y transformarlos para poder calcular el SUM?
fuente
-F-
lo hará.tr -d "- "
primero.-F-
.Puede usar
cut
para seleccionar la segunda columna de números ypaste -sd+
crear una serie de números para sumar. La herramientabc
se puede utilizar para hacer el cálculo.Cómo funciona
Selecciona los números de la segunda columna.
Vuelva a formatearlos en una sola línea con un
+
signo entre cada número:Realiza el cálculo:
Para obtener el valor absoluto:
Si el formato del archivo
pwpower.log
está garantizado, puedecut
omitir el signo menos:fuente
Un enfoque de KISS
fuente
Me gusta su comando grep, pero podría mejorarse para eliminar el signo menos y funcionar en los casos en que no haya un signo menos. Las expresiones regulares extendidas disponibles en GNU grep con la
-E
bandera nos permiten hacer coincidir un número con mayor precisión.Es un poco más eficiente no usar cat, pero pasa el nombre del archivo como argumento al primer comando y deja que lea el archivo. También se me ocurre que si está tratando solo con la primera o la última línea del archivo, tiene más sentido usar los comandos
head
otail
primero para que solo tenga que hacer coincidir una líneagrep
.Primer valor:
Último valor:
Suma (con comando awk desde aquí ):
fuente
Esto hará el cálculo sin el menos.
Creo que cortar es más rápido que awk, en general
fuente
awk
es la herramienta correcta, pero el número probablemente puede ser positivo (¿verdad?), lo que significa que no desea usar el signo menos como separador de campo. En su lugar, use la coma como separador de campo, luego niegue cada valor numéricamente:awk
convertirá automáticamente las cadenas en números para usted:Si hay números positivos, saldrán negativos. Si solo quieres la suma, también
awk
puedes hacerlo:fuente
sqrt($2^2)
como un truco para obtener un valor absoluto.Para sumar los dos valores:
fuente
awk
?bc
=)awk
?echo $(cut -d- -f2 file | tr '\n' '+')0 | bc
cut
? En su[insert_cmd_here]
lugar, use , genere un bucle de subshell, invente nuevas matemáticas, use un clúster humano o aritmética mental, canalice mis pensamientosbc
. ¿Por qué hacemos cosas? No hay razón para que mi respuesta sea mala.Puedes usar sed también
fuente