Arrays bash中的数组元素算法
我正在使用bash并尝试添加从文件创建的数组的所有元素Arrays bash中的数组元素算法,arrays,bash,math,arithmetic-expressions,Arrays,Bash,Math,Arithmetic Expressions,我正在使用bash并尝试添加从文件创建的数组的所有元素 while read line; do array=($line); sum=0 length=${#array[@]} for i in ${array[@]:0:$length}; do sum=$[$sum+${array[i]}] #<--- this doesn't work? done echo $sum done < $1 因此,我不能使用: fo
while read line; do
array=($line);
sum=0
length=${#array[@]}
for i in ${array[@]:0:$length}; do
sum=$[$sum+${array[i]}] #<--- this doesn't work?
done
echo $sum
done < $1
因此,我不能使用:
for i in "${array[@]}"
尝试使用expr添加两个表达式,如:
sum=$(expr "$sum" + "${arr[i]}")
或
sum=$((sum+arr[i]))
echo“11 13”>test.txt
echo“12”>>test.txt
读的时候——一行;把它读作数组吗
总和=0
对于((i=1;i<${line};i++);一行中的每一个数字都要做
sum=$(expr“$sum”+“${line[i]}”)##将其添加到sum中
完成
echo$行[0]$sum##打印sum
完成
OP编辑后:
echo“ABC 11 13”>test.txt
echo“DEF 12”>>test.txt
while read -a line; do ##read it as array
sum=0
for ((i=1; i < $((${#line[@]})); i++)); do ##for every number in line
sum=$(expr "$sum" + "${line[i]}") ## add it to sum
if [[ $i -eq $((${#line[@]}-1)) ]]
then
echo "${line[0]} $sum" ##print sum
sum=0
fi
done
done < test.txt
Output:
ABC 24
DEF 12
读取时-一行;把它读作数组吗
总和=0
对于((i=1;i<$(${行[@]});i++);一行中的每一个数字都要做
sum=$(expr“$sum”+“${line[i]}”)##将其添加到sum中
如果[$i-eq$(${line[@]}-1))]
然后
回显“${line[0]}$sum”##打印sum
总和=0
fi
完成
完成
如果要使用bash中的循环对文件每行中的数字求和,可以这样做
#!/bin/bash
while read line; do
array=($line);
sum=0
length=${#array[@]}
for i in ${array[@]:0:$length}; do
sum=$[$sum+$i]
done
echo $sum
done < "$1"
sum=$(expr“$sum”+“${arr[i]}”):给我一个错误。sum=$((sum+arr[i]):不起作用:/i没有错误我修改了你的脚本。我不能将其用于循环,我在编辑的问题中解释了原因。在“${!行[@])中为i使用
如何;do
或for((i=0;i<${line};i++)
或for((i=0;i<${length};i++)
也不会继续编辑带有附加要求的问题。问题不是循环,我正在成功地从索引1创建到数组长度。问题在于算术。它不接受整数和数组字符串数的相加。我不能将其用于循环,我在编辑的问题中解释了原因。@Vaderico仍然I
是值,而不是索引。请参见编辑。你的问题也有输入错误。它应该是length=${#array[@]}
而不是length=${#arr[@]}
while read -a line; do ##read it as array
sum=0
for ((i=1; i < $((${#line[@]})); i++)); do ##for every number in line
sum=$(expr "$sum" + "${line[i]}") ## add it to sum
if [[ $i -eq $((${#line[@]}-1)) ]]
then
echo "${line[0]} $sum" ##print sum
sum=0
fi
done
done < test.txt
Output:
ABC 24
DEF 12
#!/bin/bash
while read line; do
array=($line);
sum=0
length=${#array[@]}
for i in ${array[@]:0:$length}; do
sum=$[$sum+$i]
done
echo $sum
done < "$1"
awk '{s=0;for(i=1;i<=NF;i++) s+=$i;print s}' file