我需要获取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
答案 0 :(得分:0)
你应该在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
答案 1 :(得分:0)
或者我最喜欢的模式之一:
cut -d "," -f 3 "$FILE" | paste -sd+ | bc