【发布时间】:2020-11-16 06:53:00
【问题描述】:
我是一名生物信息学学生,刚接触 bash 和编程。 我想计算基因组覆盖率。 #这是我的脚本,我用xx切换实参,但我确定xxs没有问题,其他同学已经执行了这个脚本,没有错误。
filename=$1
reference=/xx
filebase=$(basename $filename .bam)
samtools view ${filename} -F 4 -q 30 -b > ${filebase}.f.bam
genomeCoverageBed -ibam -g ${filebase}.f.bam ${reference} > /mnt/ABC/projects/abc/def/${filebase}.cov
coverage=$(grep genome /mnt/ABC/projects/abc/def/${filebase}.cov | awk '{NUM+=$2*$3; DEN+=$3} END {print NUM/DEN}')
echo -e "${filename},${coverage}" >> coverages.txt
当我执行这个脚本时 sh ./coverage.sh /mnt/XYZ/share/sdf_rawdata/hsa/mergedbams/ghj_merged_200203.hs37d5.cons.90perc.bam
它不起作用并给我 awk: cmd.行:1:致命:除以零尝试和无法识别的参数:/mnt/XYZ/share/sdf_rawdata/hsa/mergedbams/ghj_merged_200203.hs37d5.cons.90perc.bam 错误 在coverages.txt 文件中只有这一行 -e /mnt/NEOGENE2/share/compevo_rawdata/hsa/mergedbams/Ash128_all.merged.hs37d5.fa.cons.90perc.bam, 仅此而已。 感谢您的帮助
【问题讨论】:
-
这意味着
DEN等于零。您没有在$filebase.cov中显示违规行的内容,因此我们无法知道第三个字段,因此不知道如何计算DEN -
顺便说一句,如果用户传入包含空格或其他 shell 元字符的文件名,您的脚本将失败。请参阅When to wrap quotes around a shell variable(TLDR:基本上总是)。
标签: linux shell awk bioinformatics genome