脚本将适当的列(即每行与所指示的列中出现的数字相加)相加,创建结果的数字列并将其写入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。请给我一些想法,用什么工具来解决问题。
答案 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 ....)