3

誰かが助けてくれることを願っています...

次のように、改行で区切られたファイルに整数を解析しました。

...
427562786
6834257
978539857
9742
578375
...

これらを配列に入れて合計したいと思います。ただし、いくつかの熱心なグーグルの後、forループを使用してこれを行う合理的な方法しか見つけることができません。これは、ファイルを1行ずつ読み取るための最良の方法ではありません。

このスクリプトのどこかで次のように宣言する必要があることを理解しています:

IFS='
'
while read line
do
array creation magic here
done < /tmp/file

SUM=0
while read line
do
SUM= sum array elements magic here
done < /tmp/file

printf $SUM

私よりも知識のある人が私に欠けているものを教えてもらえますか?ありがとう。:)

4

2 に答える 2

2

配列が中間ステップにすぎず、それ以降は必要ない場合、これは最終的な答えに直接つながります。

sum=0
while read N
do
    # sum=$((sum+N)) - the line below shows a more concise syntax
    ((sum += N))
    echo "Added $N to reach $sum"
done < /tmp/list_of_numbers

echo $sum
于 2012-08-22T09:59:15.343 に答える
1

bash 4には、mapfileコマンドがあります。

mapfile -t numbers < /tmp/list_of_numbers

for n in "${numbers[@]}"; do
    (( sum += n ))
done

以前のバージョンの bash では、 を使用できますがread、もう少し冗長です。

IFS=$'\n' read -d '' -a numbers < /tmp/list_of_numbers
于 2012-08-22T12:42:22.353 に答える