如何从文本文件中添加一行数字--Bash Shell Scripting

时间:2015-10-08 04:46:52

标签: bash shell sum rows

我试图编写一个bash脚本,按行和列计算数字的平均值。我正在阅读的文本文件示例是:

1 2 3 4 5
4 6 7 8 0

行数未知且列数未知。目前,我只想尝试用while循环对每一行求和。所需的输出是:

1 2 3 4 5 Sum = 15
4 6 7 8 0 Sum = 25

依此类推,每行等等。目前这是我的代码:

while read i
do
  echo "num: $i"
  (( sum=$sum+$i ))
  echo "sum: $sum"
done < $2

要调用程序,它的统计信息是-r test_file。 &#34; -r&#34;表示行 - 我还没有开始列。我当前的代码实际上只取每列的第一个数字并将它们加在一起,然后其余数字作为语法错误错误输出。它说错误来自16,即((sum = $ sum + $ i))行,但我老实说无法弄清问题是什么。我应该告诉你,我非常擅长打击脚本,我已经用Google搜索并搜索了高低,以获得答案,但无法找到它。任何帮助是极大的赞赏。

3 个答案:

答案 0 :(得分:2)

您正逐行读取文件,求和行不是算术运算。试试这个:

while read i
do
  sum=0
  for num in $i
  do
    sum=$(($sum + $num))
  done
  echo "$i Sum: $sum"
done < $2

使用for循环从每一行拆分每个数字。我希望这会有所帮助。

答案 1 :(得分:1)

另一种非bash方式(con:OP要求bash,pro:不依赖于bashisms,与浮动一起使用)。

awk '{c=0;for(i=1;i<=NF;++i){c+=$i};print $0, "Sum:", c}'

答案 2 :(得分:0)

另一种方式(不是纯bash):

while read line
do
    sum=$(sed 's/[ ]\+/+/g' <<< "$line" | bc -q)
    echo "$line Sum = $sum"
done < filename