首页 > 解决方案 > 处理 awk 结果除以零内的变量

问题描述

我正在使用 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+=$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

我试图不放$变量,但也出现同样的错误。

请问有什么帮助吗?

标签: shellawkfatal-errordivisiondivide-by-zero

解决方案


将部分更改awk为:

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

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


推荐阅读