bash循环通过单独的目录在另一个目录中运行命令并重新直接输出

时间:2015-09-16 13:59:10

标签: bash loops

我正在尝试创建一个bash,它将使用存储在单独驱动器上的所有bam文件(/ media / cmccabe / C2F8EFBFF8EFAFB9 / pool_I_090215),在我已将目录更改为的程序中运行它们,并将输出重定向到(/ home / cmccabe / Desktop / NGS / pool_I_090215)。我不确定下面是否接近,但希望它是一个开始。谢谢:))

cmccabe@HPZ640:~/Desktop/NGS$ for f in /media/cmccabe/C2F8EFBFF8EFAFB9/pool_I_090215/*.bam do bname=`basename $f` pref=${bname%%.bam} samtools view -H $f | sed '/^@PG/d' | samtools reheader - $f > /home/cmccabe/Desktop/NGS/pool_I_090215/${prefix}_newheader.bam done
bash: syntax error near unexpected token `|'

1 个答案:

答案 0 :(得分:4)

for循环的语法要求do前面加一个换行符或分号:

for f in /media/cmccabe/C2F8EFBFF8EFAFB9/pool_I_090215/*.bam ; do
    bname=`basename $f`
    pref=${bname%%.bam}
    samtools view -H $f | sed '/^@PG/d' | samtools reheader - $f > /home/cmccabe/Desktop/NGS/pool_I_090215/${prefix}_newheader.bam
done

另请注意,$pref$prefix是不同的变量。如果路径可能包含奇怪的字符,则双引号变量会更安全。