我有一個命令我要對所有文件夾的文件中運行的一部分,該命令的語法如下:擊:替換文件名
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