我正在尝试创建一个脚本,从sam文件的标头中删除读取组。从命令行运行的代码如下所示。
samtools view -H e2_20.indel.recal.dedup.bam | awk ' BEGIN {FS = "\t"} {split($2,a,":")} {if ($1 != "@RG" || ($1 =="@RG" && a[2] == "e2_20")) print}' | samtools reheader - e2_20.indel.recal.dedup.bam | samtools view -H -
以下是输入文件的示例
@HD VN:1.4 GO:none SO:coordinate
@SQ SN:chr10 LN:129993255
@SQ SN:chr11 LN:121843856
@RG ID:e2_20 PL:illumina
@RG ID:e2_9 PL:illumina
@PG ID:GATK IndelRealigner
运行上述命令后,输出为
@HD VN:1.4 GO:none SO:coordinate
@SQ SN:chr10 LN:129993255
@SQ SN:chr11 LN:121843856
@RG ID:e2_20 PL:illumina
@PG ID:GATK IndelRealigner.
基本上,我只是删除以“@RG”开头并且不是ID e2_20的行。
问题是如果我在bash脚本中运行它,那么该命令不起作用。
脚本如下。
#!/bin/bash
#$ -j y
#$ -S /bin/bash
#$ -V
#$ -cwd
source /apps1/modules/init/bash
module load samtools/gnu/1.1
input=$1
output=$2
samp=$3
samtools view -H ${input} | awk ' BEGIN {FS = "\t"} {split($2,a,":")} {if ($1 != "@RG" || ($1 =="@RG" && a[2] == "${samp}")) print}' | samtools reheader - ${input} > ${output}
echo "samtools view -H ${input} | awk ' BEGIN {FS = "\t"} {split($2,a,":")} {if ($1 != "@RG" || ($1 =="@RG" && a[2] == "${samp}")) print}' | samtools reheader - ${input} > ${output}"
此脚本在SGE集群中运行,这是脚本顶部奇怪语法的原因。脚本的名称是reHeadBams.bash。我通过输入以下命令在shell上运行脚本:
qsub reHeadBams.bash e2_20.indel.recal.dedup.bam e2_20.prac.indel.recal.dedup.bam e2_20
命令的参数是输入文件,后跟输出文件,最后是我想要查找的示例或读取组。
脚本的输出如下所示:
@HD VN:1.4 GO:none SO:coordinate @SQ SN:chr10 LN:129993255 @SQ SN:chr11 LN:121843856
@PG ID:GATK IndelRealigner.
因此脚本删除了所有读取组,而不是ID为e2_9的读取组。
我从脚本回显了命令,输出是
samtools view -H e2_20.indel.recal.dedup.bam | awk ' BEGIN {FS = '\t'} {split(e2_20.prac.indel.recal.dedup.bam,a,:)} {if (e2_20.indel.recal.dedup.bam != '@RG' || (e2_20.indel.recal.dedup.bam =='@RG' && a[2] == 'e2_20')) print}' | samtools reheader - e2_20.indel.recal.dedup.bam > e2_20.prac.indel.recal.dedup.bam
虽然我可能会弄错,但问题似乎是awk使用我的命令行参数而不是输入文件的列为$ 1和$ 2。有谁知道为什么会这样?
很抱歉我的问题长篇大论。如果您需要任何澄清,请告诉我。
答案 0 :(得分:0)
问题是我需要使用-v参数将变量导入到“samp”变量为awk,如下所示。
纠正之前
samtools view -H ${input} | awk ' BEGIN {FS = "\t"} {split($2,a,":")} {if ($1 != "@RG" || ($1 =="@RG" && a[2] == "${samp}")) print}' | samtools reheader - ${input} > ${output}
更正后
samtools view -H ${input} | awk -v samp="$3" ' BEGIN {FS = "\t"} {split($2,a,":")} {if ($1 != "@RG" || ($1 =="@RG" && a[2] == samp)) print}' | samtools reheader - ${input} > ${output}