음수 값을 얻으려면 파일의 각 줄에 있는 숫자를 곱하세요.

음수 값을 얻으려면 파일의 각 줄에 있는 숫자를 곱하세요.
#!/bin/bash

sed  's/[^0-9 ]*//g'  $1 | tr " " "\n" > outfile.txt

sed '/^\s*$/d' outfile.txt > outfile1.txt


if [ $2 == "-s" ] || [ $2 == "-si" ] || [ $2 == "-is" ]
then
sum=0;
while read num;
do ((sum += num));
done < outfile1.txt;
echo "SUMA= $sum"
fi

if [ $2 == "-i" ] || [ $2 == "-si" ] || [ $2 == "-is" ]
then
ilo=1;
while read num1;
do((ilo = num1 * ilo));
echo $num1
done < outfile1.txt;
echo "ILOCZYN= $ilo"
fi

이것은 내 스크립트이고 첫 번째 매개변수 파일입니다.

1 2 3 4 5 4 3 2 3 4 5 4 3 
2 2 2 2 22 3 34 4 4 5 5 5 d 
3 43 54 5 3

이것은 모든 숫자와 그 합을 곱하고 싶을 때 스크립트에서 얻은 것입니다.

s17545@msh:~$ ./skrypt12.sh logfile.txt -si
SUMA= 241
1
.
. all of the numbers in outfile1.txt 
.
3
ILOCZYN= -2888071394797551616

내가 뭘 잘못하고 있는지 어떤 아이디어가 있습니까?

답변1

~처럼페이지 @steeldriver로 연결됨산술 오버플로는 Bash에서 피할 수 없는 사실임을 설명합니다. 다음과 같이 변경할 수 있습니다.

  • Haskell, Lisp 또는 Scheme과 같이 기본적으로 모든 크기의 숫자를 지원하는 언어를 사용하십시오.
  • Java 또는 Rust와 같은 산술 오버플로 시 예외를 발생시키는 언어를 사용하세요.
  • 각 작업 후에 제품이 감소하는지 확인하십시오(모든 숫자가 양수이므로).
  • 모든 숫자를 동시에 곱할 필요가 없도록 접근 방식을 다시 생각해 보십시오(물론 이것이 항상 가능한 것은 아닙니다).

관련 정보