处理 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} 是否为非零检查。
我正在使用 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} 是否为非零检查。