我有一个命令我要对所有文件夹的文件中运行的一部分,该命令的语法如下:击:替换文件名
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
非常感谢,它做到了!总是有一些小...你有任何想法如何解决我编辑中的问题? – Sajber 2014-09-24 06:05:43
您可以使用'“$ {f/_ [0-9] .fastq/.bam}”'编辑零件。 – anubhava 2014-09-24 06:08:20
如果你想'path/to/sample.bam'作为最终输出,你也可以使用''$ {f/[0-9] _ [0-9] .fastq/.bam}“''' – anubhava 2014-09-24 06:20:53