我想总结第一个参数给出的文件(列和行)中的所有数字,但我的程序显示sum=sum+$i
而不是数字和:
sum=0;
file=$1
for i in $file
do
sum=sum+$i;
done;
echo "The sum is: " $sum
输入文件:
$cat file.txt
10 20 10
40
50
预期产出:
The sum is: 21
也许如果有一种awk方法可以解决这个问题?
答案 0 :(得分:0)
试试这个 -
$cat file1.txt
10 20 10
40
50
$awk '{for(i=1;i<=NF;i++) {sum+=$i}} END {print sum}' file1.txt
130
OR
$xargs < file1.txt| tr ' ' + | bc
130
答案 1 :(得分:0)
cat file.txt | xargs | sed -e 's/\ /+/g' | bc
答案 2 :(得分:0)
您还可以使用简单的read
和array
对依赖于分词的值求和,以通过默认值{{1}将值分隔为数组}(内部字段分隔符),例如
IFS
示例输入文件
#!/bin/bash
declare -i sum=0
fn="${1:-/dev/stdin}" ## read from file as 1st argument (default stdin)
while read -r line; do ## read each line
a=( $line ) ## separate values into array
for i in ${a[@]}; do ## for each value in array
((sum += i)) ## add to sum
done
done <"$fn"
echo "sum: $sum"
示例使用/输出
$ cat dat/numfile.txt
10 20 10
40
50
答案 3 :(得分:0)
另一些问题(至少是mawk和gawk):
$ awk -v RS="[^0-9]" '{s+=$1}END{print s}' file
130