Bash - 对于每一行总和,在[通过参数]指示的列中出现的数字

时间:2017-03-08 19:32:16

标签: bash

脚本将适当的列(即每行与所指示的列中出现的数字相加)相加,创建结果的数字列并将其写入stdout。在没有参数的情况下,“列”默认为第1列。

用法:./ script.sh filename [column1 ...]

这就是我必须为每一行加总数。

#!/bin/bash

if [ $# -lt 2 ]
then
  echo "Usage: ./script.sh filename [column1 column2 ...]"
fi

filename=$1
shift

while read line
do
  sum=0
  for num in $line
  do
    let sum=sum+num
  done
  echo "Sum: " $sum
done < $filename

如何对每行的参数[column1 column2 ....]指示的列中出现的数字求和,并创建结果数字列并将其写入stdout。请给我一些想法,用什么工具来解决问题。

1 个答案:

答案 0 :(得分:0)

只需扩展现有脚本,这样的事情应该有效(未经测试):

#!/bin/bash

if [ $# -lt 2 ];then
  echo "Usage: ./script.sh filename [column1 column2 ...]" &&  exit 1 
  #exit the script - no further processing
fi

[ ! -f $1 ] && echo "Filename given not a valid file-exiting" && exit 1

filename=$1 && shift 

while [ $# -ge 1 ];do    #Read all args and put them in an array
  toadd+=( "$1" ) && shift
done

while read -r line;do           #Read line from file
  read -ra columns <<<"$line"   #split the line into field using an array
  sum=0
  for i in "${toadd[@]}";do     #For items in array $toadd
    num="${columns[$i-1]}"      #get the corresponding element from array columns
    let sum=sum+num
  done

  echo "Sum: " $sum
done < $filename
exit 0

PS:这适用于文件的空格分隔记录(col1 col2 ....)