我有500多个文件需要从.bam更改为.sam,所以我尝试使用samtools。我在这里做了一些查找,找到了这个答案(Changing file paths outputs within a loop, in a shell script),并修改了它以适合我的工作:
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'不存在沿着'模糊重定向'。我已经检查,它肯定存在的scratch。我也尝试了这样的情况下,我的方式过于复杂的事情:
for i in `ls ${/scratch/spectre/h/home/Data/}/*.bam`
do
samtools view -h <$i >${/scratch/spectre/h/home/Data_Sam}/$i.sam
done
对于这个我得到了错误'bad substitution'为${/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多个文件,改变他们从巴姆到山姆和存储他们的地方新的?
1条答案
按热度按时间gab6jxml1#
在第一次尝试中,您要寻找的字串替代语法是
${parameter/pattern/string}
,其中 parameter 会展开,而在结果中,最长的 pattern 相符项目会被 string 替代。请注意,此语法使用大括号,而不是圆括号(请参阅Bash手册中的Shell Parameter Expansion)。我想这就是你想做的:
通过一些小的修改,您可以轻松地使它对包含空格或在中间某处包含“.bam”的文件名更加健壮: