funciona na linha de comando, mas não em um script de shell
Pergunta
eu tenho essa linha
samtools view -h file | awk '$3=="chr$a" || /^@/' | samtools view -S - -b -o output
o traço entre -S e -b deve indicar ao programa que é de STDIN.Posso executá-lo a partir de um script Perl na linha de comando, mas assim que tento movê-lo para um script Shell, ele apenas cria o arquivo sem gerar nenhum dado.Qualquer idéia seria muito apreciada.
Solução
Em um script de shell, $a entre aspas simples não será expandido:
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
Outras dicas
Se ainda não o fez, dê uma olhada no Perguntas frequentes sobre samtools.Contém exemplos de como fazer coisas semelhantes ao que você deseja fazer com seu pipeline.
Já faz um tempo que não uso o samtools, mas teria escrito seu comando assim:
samtools view -h file | awk '$3=="chr$a" || /^@/' | samtools view -S -b - > output.bam
Você também mencionou que moveu o comando para um script de shell.O script de shell está fazendo mais alguma coisa?Se ainda não funcionar, eu postaria isso para gente ver.