gpt4 book ai didi

Bash:替换部分文件名

转载 作者:行者123 更新时间:2023-11-29 09:40:17 25 4
gpt4 key购买 nike

我有一个命令要对一个文件夹的所有文件运行,该命令的语法如下所示:

tophat -o <output_file> <input_file>

我想做的是一个脚本,它循环遍历任意文件夹中的所有文件,并使用输入文件名来创建相似但不同的输出文件名。文件名如下所示:

input name                desired output name
path/to/sample1.fastq path/to/sample1.bam
path/to/sample2.fastq path/to/sample2.bam

让输入起作用似乎很简单:

for f in *.fastq
do
tophat -o <output_file> $f
done

我尝试使用 output=${f,.fastq,.bam} 并将其用作输出参数,但这不起作用。我得到的只是一个错误:line 3: ${f,.fastq,.bam}: bad substitution。这是做我想做的事情的方法,还是我应该做其他事情?如果这是正确的方法,我做错了什么?

[编辑]:

谢谢大家的回答!不过,还有一个额外的问题......如果我有这样命名的文件怎么办:

path/to/sample1_1.fastq
path/to/sample1_2.fastq
path/to/sample2_1.fastq
path/to/sample2_2.fastq
...

...我可以有任意数量的样本(sampleX),但所有样本都有两个与之关联的文件(_1_2 )。命令现在看起来像这样:

tophat -o <output_file> <input_1> <input_2>

因此,仍然只有一个输出,我可以为此执行"${f/_[1-2].fastq/.bam}"之类的操作,但我不确定如何获得一个只在每个 sampleX 上迭代一次的循环,同时获取两个相关文件...想法?

[编辑#2]:

所以,这是成功的最终脚本!

for f in *_1.fastq
do
tophat -o "${f/_1.fastq/.bam}" $f "${f/_1.fastq/_2.fasq}"
done

最佳答案

您可以使用:

tophat -o "${f/.fastq/.bam}" "$f"

测试:

f='path/to/sample1.fastq'
echo "${f/.fastq/.bam}"
path/to/sample1.bam

关于Bash:替换部分文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25997430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com