unix for循环修改输出文件名

时间:2017-08-08 08:57:49

标签: bash unix for-loop

我正在一个文件名以fastq.gz结尾的目录中工作。使用如下所示的循环,我将运行一个工具。

for i in {LS {1}}

我的问题是,我希望我的输出文件名以.sai而不是fastq.gz结尾,并保持文件名的其余部分相同。然而,当它在; do if [[ "$i" == *".gz" ]]; then bwa aln ../hg38.fa $i > $i | sed 's/fastq.gz/sai/g'; fi; done之后首次看到$i时,它会修改输入文件本身。我试着像>一样使用它,但这也不起作用。写这个的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用字符串替换来计算文件名和扩展名。 此外,您不应该依赖ls输出,而是直接遍历您正在寻找的表达式。

 for file in *.gz; do
   name="${file%.*}"
   file_output="${name}.sai"
   bwa aln ../hg38.fa ${file} > ${file_output}
 done