Grep resto da linha.....após a partida

Grep resto da linha.....após a partida

Tenho um arquivo contendo apenas duas linhas, com a seguinte estrutura:

$ cat /tmp/pwpower.log
000D6F0000D34227, -114.10
000D6F0001A405C4, -130.09

Os valores são valores de potência da minha usina solar. Valor negativo significa geração.

Eu precisaria dos valores extraídos via grep/sed/awk - qualquer que seja a maneira mais inteligente. Preciso extrair os dois valores separadamente e sem o sinal de menos.

O que faço agora é meio estúpido, mas funciona - tenho certeza que muitos de vocês terão maneiras mais inteligentes para mim :-) Aqui, é claro, só vejo os valores mais menos.

Para obter o primeiro valor:

cat /tmp/pwpower.log |grep -o "\-.*" | head -n 1

Para obter o segundo valor:

cat /tmp/pwpower.log |grep -o "\-.*" | tail -n1

E pergunta relacionada, existe uma maneira simples de pegar essas STRINGs e transformá-las para que eu possa calcular o SUM?

Responder1

Todos os valores:

$ awk -F '[ -]*' '$0=$NF' /tmp/pwpower.log
114.10
130.09

Valor na primeira linha:

$ awk -F '[ -]*' 'NR==1{print $NF;exit}' /tmp/pwpower.log
114.10

Valor na segunda linha:

$ awk -F '[ -]*' 'NR==2{print $NF;exit}' /tmp/pwpower.log
130.09

Soma de todos os valores:

$ awk -F '[ -]*' '{sum+=$NF} END{print sum}' /tmp/pwpower.log
244.19

Responder2

Você pode usar cutpara selecionar a segunda coluna de números e paste -sd+para criar uma série de números para somar. A ferramenta bcpode então ser usada para fazer o cálculo.

$ cut -d',' -f2 pwpower.log | paste -sd+ | bc
-244.19

Como funciona

Seleciona os números da 2ª coluna.

$ cut -d',' -f2 pwpower.log 
 -114.10
 -130.09

Reformata-os em uma única linha com um +sinal entre cada número:

$ cut -d',' -f2 pwpower.log | paste -sd+
 -114.10+ -130.09

Executa o cálculo:

$ cut -d',' -f2 pwpower.log | paste -sd+ | bc
-244.19

Para obter o valor absoluto:

$ cut -d',' -f2 pwpower.log | sed 's/-//g' | paste -sd+ | bc
244.19

Se o formato do arquivo pwpower.logfor garantido você pode cutomitir o sinal de menos:

$ cut -d'-' -f2 pwpower.log | paste -sd+ | bc
244.19

Responder3

Uma abordagem KISS

$ awk '{print -$2; t+=-$2}; END{print t}' pwpower.log 
114.1
130.09
244.19

Responder4

[root@ip-10-186-149-181 ~]# cut -d '-' -f2 /tmp/pwpower.log | paste -sd+ | bc
244.19

Isso fará o cálculo sem o sinal de menos.

Eu acho que cut é mais rápido que awk, em geral

informação relacionada