Bash에서 파일의 변수를 합산하는 방법

Bash에서 파일의 변수를 합산하는 방법

파일의 숫자를 한 줄씩 합산해야 합니다.

문서:

1.0
0.46
0.67

합산한 다음 3으로 나누고 싶습니다.

나는 현재 다음을 가지고 있습니다:

while IFS= read -r var
do
   x=$(($var + $x)) | bc -l
done < "file.txt"
echo "$x / 3"

내 실수:

-bash: 1.0 + 0: syntax error: invalid arithmetic operator (error token is ".0 + 0")

답변1

Bash/셸 산술은 부동 소수점 산술을 처리할 수 없습니다. 다음을 사용하여 작업을 수행할 수 있습니다 awk.

awk '{sum= sum+$1} END {print sum/3}' file

그러면 파일을 읽고 각 줄을 에 추가합니다 sum. 파일 읽기가 끝나면 sum3으로 나눈 내용이 인쇄됩니다.

답변2

재미로

$ paste -sd+ file | dc -e2k0 -f- -e+3/p
.71

여기서 우리는dc 역광택계산기: 쓰고 싶은 숫자를 더하세요.

1.0 0.46 + 0.67 +

그러나 스택을 0( )으로 채워서 -e0더 쉽게 만들 수 있습니다.

0 1.0+0.46+0.67 +

합계의 본문은 다음과 같이 간단히 생성할 수 있기 때문입니다 paste command.

$ paste -sd+ file
1.0+0.46+0.67

마지막으로 합계의 마지막 접미사 +와 접미사 나누기가 필요합니다. 이를 다른 -e명령으로 작성할 수 있습니다(최종 결과를 인쇄하는 것을 잊지 마세요) -e+3/p.

마지막 문제 중 하나는 dc임의의 정밀도로 작동하지만 나눗셈의 기본값은 정밀도 0이므로 정수 결과가 반환된다는 것입니다. 스택에 푸시한 다음 스택에서 꺼내는 2k명령을 사용하여 이를 변경할 수 있으며 결과를 사용하여 정밀도를 설정할 수 있습니다.2

함께 넣어보세요:

paste -sd+ file | dc -e2k0 -f- -e+3/p

답변3

이 시도:

x=0
while IFS= read -r var; do
    x="$(echo "$var + $x" | bc -l)"
done < "file.txt"
echo "$x / 3" | bc -l
  1. x정의되지 않았습니다.
  2. 이것이 작동하려면 echofor가 필요합니다 (혼합 bash 산술이 아님).bc

답변4

숫자를 합산하면,numsumnum-utils포장 에서이 작업을 한 번에 수행합니다.

x=$(numsum file.txt)

십진수를 행복하게 처리합니다.

numprocess동일한 패키지에서 후속 파티셔닝을 수행하는 데 도움이 될 수 있습니다.

numsum file.txt | numprocess /%3/

%numprocess는 나눗셈을 표현하는 방법 이고 , 슬래시는 인수 구조에서 이상합니다.

관련 정보