在Shell脚本中循环更改文件路径输出

问题描述

我想做一个循环以运行多个输入文件,并为每个输入文件生成一个输出文件

我可以使用此命令从1个输入sam文件制作1个输出bam文件

samtools view -S -b -h $input_file > $output_file

其中:

input_file="/scratch/RNAseq/hisat2_alignment/456.sam"
output_file="/scratch/RNAseq/BAM_files/raw_BAM/456.bam"

在将此命令放入循环中时,我不确定如何使用$output_file等价物。因为我不知道如何更改$many_output_file variable所需的文件路径和文件扩展名:

many_input_files="/scratch/RNAseq/hisat2_alignment/*.sam"

for i in $many_input_files
do 
samtools view -S -b -h $i > $many_output_file
done

有人可以帮忙吗?我是Bash的新手,我通常使用R。我曾尝试使用sed和tr,但是当我尝试从many_output_file制作many_input_files文件列表时,它们似乎出现了错误

解决方法

由于注释的帮助,这就是使循环工作的方式:

for i in $input_files
do
tmp=${i/hisat2_alignment/BAM_files/raw_BAM}
samtools view -S -b -h $i > ${tmp/.sam/.bam}
done