Работа с переменной внутри деления результата awk на ноль - PullRequest
0 голосов
/ 08 января 2019

Я пишу простую команду оболочки, используя awk, следующим образом:

input_folder='/home/Desktop/files'
results_folder='/home/results'

for entry in $input_folder/*
do

re=$(samtools view -H $entry | grep -P '^@SQ' | cut -f 3 -d ':' | awk '{sum+=$1} END {print sum}')

echo -e "$(samtools depth $entry | awk '{sum+=$3} END { print $(sum/$re)}')\t/$entry" >> $results_folder/Results.txt

done

результат в переменной re является числом, но использование результата re во второй команде print $(sum/$re)}' выдает мне эту ошибку awk: cmd. line:1: (FILENAME=- FNR=312843568) fatal: division by zero attempted

Я пытался не ставить $ с переменной, но также с той же ошибкой.

Любая помощь с этим, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 08 января 2019

Я не понимаю, почему вы отправляете вывод команды echo на awk. ВАША фактическая команда awk должна состоять во избежании вашей ошибки (в которой говорится, что вы делите ее на ноль). Попробуйте поменять вашу awk программу на следующую?

awk -v re="$re" '{sum+=$3} END {if(re){print (sum/re)} else {print "Please check seems value of re is ZERO else you will get an error from awk program}}'
0 голосов
/ 08 января 2019

Вставка переменной bash в awk сделает эту работу:

awk '{sum+=$3} END { print(sum/'${re}') }'

Вам лучше также проверить $ {re} в bash на ненулевую проверку, прежде чем переходить на awk.

0 голосов
/ 08 января 2019

Измените awk деталь на:

awk -v re="$re" '{sum+=$3} END { if(re) print sum/re; else print "oo";}'

Вы должны использовать -v для перевода переменной в awk.
А также лучше проверить, равен ли re нулю.
Я использовал oo для представления Infinity symbol.

...