Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 尝试获取索引的总和时,总和表达式无效_Unix_Awk - Fatal编程技术网

Unix 尝试获取索引的总和时,总和表达式无效

Unix 尝试获取索引的总和时,总和表达式无效,unix,awk,Unix,Awk,我需要获取csv文件每一行中特定索引处存在的所有值的总和。该文件可能包含50000条以上的记录。因此,效率是一个给定的参数 我正在尝试以下代码。但似乎不起作用 #!/bin/sh FILE=$1 # read $FILE using the file descriptors exec 3<&0 exec 0<$FILE while read line do valindex=`cut -d "," -f 3` echo $valindex sum=`expr $sum

我需要获取csv文件每一行中特定索引处存在的所有值的总和。该文件可能包含50000条以上的记录。因此,效率是一个给定的参数

我正在尝试以下代码。但似乎不起作用

#!/bin/sh

FILE=$1
# read $FILE using the file descriptors

exec 3<&0
exec 0<$FILE

while read line
do

valindex=`cut -d "," -f 3`
echo $valindex
sum=`expr $sum+$valindex`

done

echo $sum
#/垃圾箱/垃圾箱
文件=$1
#使用文件描述符读取$FILE

exec 3您应该在while循环之前初始化sum:

sum=0
你需要删去你正在阅读的内容:

valindex=`echo $line|cut -d "," -f 3`
expr中加号前后需要一个空格:

sum=`expr $sum + $valindex`
或者,使用awk。这要简单得多:

awk -F, '{SUM+=$3} END{print SUM}' $FILE

或者我最喜欢的模式之一:

cut -d "," -f 3 "$FILE" | paste -sd+ | bc

谢谢。awk方法完成了任务。但是为什么早期的方法不起作用呢??