ディレクトリ内の一部のcsvファイルに対して入力として使用して、いくつかの数学的計算を実行したいと思います。ファイルはランダムに指定されるため、静的名を使用することはオプションではありません。また、要件は、csvシートの最初と最後の数字を使用して実際の数値シーケンスを作成し、シートの実際の行数を読み取り、欠落シーケンスの割合を計算することです。 Forループを使用してファイルを読み取り、シーケンスを作成し、行数を計算しwc -l
、それを一時ファイル(total.csv)に保存して、パーセンテージ計算を実行します。場合によっては、ワークシートに行が1つしかない可能性があるため、これを考慮する必要があります。この場合、欠落しているパーセンテージはゼロにする必要があるため、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
私はこの問題に閉じ込められており、それを理解することはできません。上記の要件を達成するためのより良いメカニズムはありますか?よろしくお願いします。