处理 awk 结果中的变量除以零

Dealing with variable inside awk result division by zero

我正在使用 awk 编写一个简单的 shell 命令,如下所示:

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+=} END {print sum}')

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

done

变量 re 中的结果是一个数字,但是在第二个命令 print $(sum/$re)}' 中使用 re 的结果给我这个错误 awk: cmd. line:1: (FILENAME=- FNR=312843568) fatal: division by zero attempted

我试着不把$和变量放在一起,但还是同样的错误。

有什么帮助吗?

awk 部分更改为:

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

您必须使用-v将变量转移到awk
而且最好检查 re 是否为零。
我用oo表示Infinity symbol.

我不清楚为什么要将 echo 命令的输出发送到 awk。你的实际 awk 命令应该是为了避免你的错误(它告诉你你将它除以零)。尝试将您的 awk 程序更改为以下一次?

awk -v re="$re" '{sum+=} 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}}'

将 bash 变量放入 awk 即可完成工作:

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

在传递给 awk 之前,您最好在 bash 中检查 ${re} 是否为非零检查。