디렉터리에 있는 일부 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
나는이 문제에 갇혀 있고 그것을 알아낼 수 없습니다. 위의 요구 사항을 달성하기 위한 더 나은 메커니즘이 있습니까? 미리 감사드립니다.