首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SAMtools并存储大量文件的输出

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

Stack Overflow用户
提问于 2022-06-30 12:44:42
回答 1查看 38关注 0票数 0

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

代码语言:javascript
复制
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‘和’歧义重定向‘不存在。我查过了,它确实存在于划痕中。我也尝试过这样做,以防事情变得复杂:

代码语言:javascript
复制
 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`的错误“坏替代”。

我还尝试了以下操作,并得到了错误“错误替换”:

代码语言:javascript
复制
for i in "ls ${/scratch/spectre/h/home/Data/}/*.bam";
do filename "${i%%.*}";
samtools view $i ${filename}.sam;
done

有没有办法循环我的500+文件,将它们从bam更改为sam,并将它们存储在新的地方?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-01 22:04:00

在第一次尝试中,您要寻找的字符串替换语法是${parameter/pattern/string},其中参数被展开,结果是最长的模式匹配被字符串替代。注意,这个语法使用大括号,而不是括号(参见Bash手册中的壳参数展开 )。

我想这就是你想要做的

代码语言:javascript
复制
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“的文件名更加健壮:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72816094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档