AWK - 양수 값과 음수 값을 별도의 변수로 합산합니다.

AWK - 양수 값과 음수 값을 별도의 변수로 합산합니다.

CSV다음과 같은 파일이 있습니다 .

2019.04.15;3.75;
2019.04.29;-5.17;
2019.05.01;7.5;
2019.05.06;0.5;
2019.05.13;0.25;
2019.05.20;-8.5;

두 번째 열의 plus합계 값의 합계를 구하고 싶습니다.minus

나는 다음을 pipe사용하여 awk이 문제를 해결했습니다 grep.

plus=$(awk -F';' '{print $2};' "$file" |
      grep --invert-match "-" |
      awk '{s+=$1}END{print s}'
)

minus=$(awk -F';' '{print $2};' "$file" |
      grep "-" |
      awk '{s+=$1}END{print s}'
)

나는 그가 명령을 사용하여 스스로 그것을 할 수 있다고 확신합니다 awk. 질문은 그것이 어떻게 보일까요?

답변1

추가하다:

awk -F';' '$2~/^[^\-]/{s+=$2} END{print s}'  data

줄이다:

awk -F';' '$2~/^[\-]/{s+=$2} END{print s}'  data

답변2

$ set -f; IFS=" " 
$ set $(perl -F\; -lane '$A[$F[1]<0] += $F[1]}{print "@A"' "$file") 
$ plus=$1 minus=$2

답변3

또 다른 awk해결책:

awk -F\; 'BEGIN {plus=0;minus=0} 
{if ($2>0) plus+=$2; else minus+=$2; } 
END {minus=-minus; print plus minus}' input_filename

관련 정보