适用于命令行,但不适用于shell脚本

时间:2012-03-01 23:23:03

标签: perl shell awk samtools

我有这条线

samtools view -h file | awk '$3=="chr$a" || /^@/' | samtools view -S - -b -o output

-S和-b之间的短划线应该向程序指示它来自STDIN。我可以从命令行上的perl脚本运行它,但是一旦我尝试将其移动到shell脚本中,它就会创建文件而不输出任何数据。任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果您还没有,请查看samtools FAQ。这个例子可以用来做你想要用管道做的事情。

自从我使用samtools以来已经有一段时间了,但我会像这样编写你的命令:

samtools view -h file | awk '$3=="chr$a" || /^@/' | samtools view -S -b - > output.bam

您还提到您已将命令移至shell脚本。 shell脚本还在做什么吗?如果它仍然不起作用,我会发布给我们看看。

答案 1 :(得分:0)

在shell脚本中,$ a inside单引号不会被展开:

for a in {1..22} do 
  samtools view -h AD3.sorted.bam | awk '$3=="chr$a" || /^@/' | samtools view -S - -b -o chr$a.bam 
done