对 bash 中的数组元素进行算术运算
Arithmetic with array elements in bash
我正在使用 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 <
编辑:
我应该更清楚为什么我想在 for 循环
中使用数组拆分
输入可能是 ------> david 34 28 9 12
我想打印 ---> david 83
所以我想遍历所有元素接受第一个。所以我会使用:
length=$[${#array[@]} - 1]
for i in${array[@]:1:$length}
因此我不能使用:
for i in "${array[@]}"
尝试使用 expr 添加两个表达式,例如:
sum=$(expr "$sum" + "${arr[i]}")
或者
sum=$((sum + arr[i]))
echo "11 13" >test.txt
echo "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
done
echo $line[0] $sum ##print sum
done < test.txt
Output
36
OP编辑后:
回声"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
如果您想在 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 < ""
与您的代码不同的是,i
是数组中的元素,而不是索引。
但是,在 bash 中拥有文件相当慢。你最好在 awk 中完成任务,例如:
awk '{s=0;for(i=1;i<=NF;i++) s+=$i;print s}' file
我正在使用 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 <
编辑: 我应该更清楚为什么我想在 for 循环
中使用数组拆分输入可能是 ------> david 34 28 9 12
我想打印 ---> david 83
所以我想遍历所有元素接受第一个。所以我会使用:
length=$[${#array[@]} - 1]
for i in${array[@]:1:$length}
因此我不能使用:
for i in "${array[@]}"
尝试使用 expr 添加两个表达式,例如:
sum=$(expr "$sum" + "${arr[i]}")
或者
sum=$((sum + arr[i]))
echo "11 13" >test.txt
echo "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
done
echo $line[0] $sum ##print sum
done < test.txt
Output
36
OP编辑后:
回声"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
如果您想在 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 < ""
与您的代码不同的是,i
是数组中的元素,而不是索引。
但是,在 bash 中拥有文件相当慢。你最好在 awk 中完成任务,例如:
awk '{s=0;for(i=1;i<=NF;i++) s+=$i;print s}' file