負の値を取得するには、ファイルの各行にある数値を掛けます。

負の値を取得するには、ファイルの各行にある数値を掛けます。
#!/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などの算術オーバーフロー時に例外を発生させる言語を使用してください。
  • 各作業後に製品が減少することを確認してください(すべての数字が正数であるため)。
  • すべての数字を同時に掛ける必要がないようにアプローチを考え直してください(もちろん、これは必ずしも可能ではありません)。

関連情報