使用SAMtools并存储大量文件的输出



我有500+文件,我需要从。bam更改为。sam,所以我试图使用samtools。我在这里做了一些研究,找到了这个答案(在shell脚本中更改循环内的文件路径输出)并修改它以适合我的工作:

input_files="/scratch/spectre/h/homeTCGA_Data/*.bam"
output_files="/scratch/spectre/h/home/Data_Sam"
for i in $input_files 
do
tmp=$(i/scratch/spectre/h/home/Data_Sam) 
samtools view -h $i > $(tmp/.bam/.sam)
done

我在这方面完全是个新手,所以我猜想我在某个地方犯了一个明显的错误。我得到的错误是,目录'Data_Sam'不存在与'模棱两可的重定向'。我检查过了,它确实存在于草稿中。我也试过这样做,以防我把事情弄得太复杂了:

for i in `ls ${/scratch/spectre/h/home/Data/}/*.bam`
do
samtools view -h <$i >${/scratch/spectre/h/home/Data_Sam}/$i.sam
done

在${/scratch/spectre/h/home/Data/}/*.bam '中出现错误'bad substitution' .

我也尝试了以下并得到错误"坏替换":

for i in "ls ${/scratch/spectre/h/home/Data/}/*.bam";
do filename "${i%%.*}";
samtools view $i ${filename}.sam;
done

有没有办法,我可以循环我的500+文件,把他们从bam到sam,并存储在新的地方?

在您的第一次尝试中,您正在寻找字符串替换的语法是${parameter/pattern/string},其中参数得到扩展,并且在结果中模式的最长匹配被字符串替换。注意,此语法使用大括号,而不是圆括号(请参阅Bash手册中的Shell参数展开)。

我想这就是你想要做的:

input_files="/scratch/spectre/h/home/Data/*.bam"
for i in $input_files 
do
tmp=${i/Data/Data_Sam}                 # replace 'Data' with 'Data_Sam'
samtools view -h $i > ${tmp/.bam/.sam} # replace '.bam' with '.sam'
done

只要稍加改动,就可以使它对包含空格或".bam"的文件名更加健壮。在中间:

input_files="/scratch/spectre/h/home/Data/*.bam"
for i in $input_files 
do
tmp="${i/Data/Data_Sam}"
samtools view -h "$i" > "${tmp/%.bam/.sam}"
done

相关内容

  • 没有找到相关文章

最新更新