我想对目录中存在的一些 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
我被这个问题困住了,无法弄清楚这个问题。有没有更好的机制来实现上述要求?提前致谢。