Eu quero realizar alguns cálculos matemáticos em alguns arquivos csv presentes dentro de um diretório, usando-os como entrada. Os arquivos serão aleatórios, portanto, usar nomes estáticos está fora de opção. Além disso, o requisito é gerar uma seqüência real de números usando o primeiro e o último número da planilha csv, ler a contagem real de linhas na planilha e, em seguida, calcular a porcentagem da sequência ausente. Estou usando um loop For para ler arquivos, gerar sequência, fazer um wc -l
para contar as linhas, armazená-lo em um arquivo temporário (total.csv) e, em seguida, executar a operação de porcentagem. Às vezes, a planilha pode ter apenas uma linha, de modo que ela deve ser levada em consideração e, se esse for o caso, a porcentagem ausente deverá ser 0, portanto, usando a condição If dentro de For loop. No final, estou removendo o arquivo temp (total.csv) e o loop continuará para todos os arquivos csv no diretório. Veja o que eu fiz.
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
O script acima lê os arquivos, mas ao gerar a sequência, ele gera um erro. Os números neste erro são a primeira linha do meu arquivo csv de entrada.
./test.sh: line 22: [: 9,-60,18240,28,0,1517400128,2356,0,0,0,0,551: integer expression expected
Estou preso a isso e não consigo entender o problema. Existe algum mecanismo melhor para cumprir o requisito indicado acima? Agradecemos antecipadamente.