Grep 나머지 라인.....경기 후

Grep 나머지 라인.....경기 후

다음 구조의 두 줄만 포함하는 파일이 있습니다.

$ 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

관련 질문입니다. SUM을 계산할 수 있도록 이러한 STRING을 가져와 변환하는 간단한 방법이 있습니까?

답변1

모든 값:

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

첫 번째 줄의 값:

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

두 번째 줄의 값:

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

모든 값의 합계:

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

답변2

을 사용하여 cut숫자의 두 번째 열을 선택하고 paste -sd+일련의 숫자를 만들어 함께 더할 수 있습니다. 그런 다음 도구를 bc사용하여 계산을 수행할 수 있습니다.

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

작동 원리

두 번째 열에서 숫자를 선택합니다.

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

+각 숫자 사이에 기호를 추가하여 한 줄로 형식을 다시 지정합니다 .

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

계산을 수행합니다.

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

절대값을 얻으려면:

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

파일 형식이 pwpower.log보장되는 경우 cut빼기 기호를 생략할 수 있습니다.

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

답변3

KISS 접근 방식

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

답변4

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

이렇게 하면 마이너스 없이 계산이 수행됩니다.

일반적으로 cut이 awk보다 빠르다고 생각합니다.

관련 정보