forループを使用してディレクトリ内の複数のファイルで数学計算を実行する

forループを使用してディレクトリ内の複数のファイルで数学計算を実行する

ディレクトリ内の一部の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

私はこの問題に閉じ込められており、それを理解することはできません。上記の要件を達成するためのより良いメカニズムはありますか?よろしくお願いします。

ベストアンサー1

おすすめ記事