Я написал код для расчета zscore, который вычисляет среднее и стандартное отклонение от одного файла и использует некоторые значения из строк в другом файле, следующим образом:Divide плавает в AWK
mean=$(awk '{total += $2; count++} END {print total/count}' ABC_avg.txt)
#calculating mean of the second column of the file
std=$(awk '{x[NR]=$2; s+=$2; n++} END{a=s/n; for (i in x){ss += (x[i]-a)^2} sd = sqrt(ss/n); print sd}' ABC_avg.txt)
#calculating standard deviation from the second column of the same file
awk '{if (std) print $2-$mean/$std}' ABC_splicedavg.txt" > ABC.tmp
#calculate the zscore for each row and store it in a temporary file
zscore=$(awk '{total += $0; count++} END {if (count) print total/count}' ABC.tmp)
#calculate an average of all the zscores in the rows and store it in a variable
echo $motif" "$zscore
rm ABC.tmp
Однако, когда я исполняю этот код, на этапе создания временного файла, я получаю сообщение об ошибке как fatal: деление на нуль предпринято, что является правильным способом реализации этого кода? TIA I использовал параметр bc -l, но он дает очень длинную версию плавающего целого.
Баш переменные не видны в 'awk' одинарные кавычки. Вы должны определить их с помощью опции -v. Однако лучше переделать так, чтобы все были вычислены в одном скрипте, так что вам не нужно передавать переменные между сценариями. – karakfa