使用for循环从目录内的不同文件进行数学计算

使用for循环从目录内的不同文件进行数学计算

我想对目录中存在的一些 csv 文件执行一些数学计算,使用它们作为输入。这些文件是随机的,因此不能选择使用静态名称。此外,要求是使用 csv 工作表中的第一个和最后一个数字生成实际的数字序列,读取工作表中的实际行数,然后计算丢失序列的百分比。我使用 For 循环来读取文件、生成序列、计算wc -l行数、将其存储在临时文件 (total.csv) 中,然后执行百分比运算。有时,工作表可能只有一行,因此必须考虑这一点,如果是这种情况,则缺失百分比应为 0,因此在 For 循环内使用 If 条件。最后,我删除了临时(total.csv)文件,循环将继续处理目录中的所有 csv 文件。这就是我所做的。

FILES=$dir/*.csv
for f in $FILES;
do
        var1=$(cat $f | wc -l)
        var2=$(cut -d ',' -f7 $f | head -n 1)
        var3=$(cut -d ',' -f1 $f | head -n 1)
        seq1=$(head -n 3 $f)
        seq2=$(tail -n 3 $f)
        if [ "$seq2" -gt "$seq1" ]; then
        seq $seq1 1 $seq2 | cat > $dir/../total.csv
        total=$(cat $dir/../total | wc -l)
        actual=$(cat $f | wc -l)
        missing=$(expr $total - $actual)
        percentage=$((100*missing/total))
        echo "missing percentage of var1 and var2 is $percentage:"
        rm $dir/total.csv
        else
        echo "Loss percentage is 0"
        fi

done

上面的脚本读取文件,但在生成序列时会抛出错误。此错误中的数字是我输入 csv 文件的第一行。

./test.sh: line 22: [: 9,-60,18240,28,0,1517400128,2356,0,0,0,0,551: integer expression expected

我被这个问题困住了,无法弄清楚这个问题。有没有更好的机制来实现上述要求?提前致谢。

相关内容