2017-08-08 45 views
0

我在一個文件名以fastq.gz結尾的目錄中工作。使用如下的循環,我將運行一個工具。unix for循環修改輸出文件名稱

for i in LS ; do if [[ "$i" == *".gz" ]]; then bwa aln ../hg38.fa $i > $i | sed 's/fastq.gz/sai/g'; fi; done

我的問題是,我希望我的輸出文件名與.sai結束fastq.gz,而不是與保持文件名相同的其餘部分。然而,它首先在>之後看到$i,它會修改輸入文件本身。我嘗試使用它像<($i | sed 's/fastq.gz/sai/g')但這也不起作用。寫這個的正確方法是什麼?

回答

1

您可以使用字符串替換來計算文件名和擴展名。 此外,您不應該依賴ls輸出,而是直接在您正在查找的表達式上循環。

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

這是一個非常好的方法,並解決了我的問題,謝謝。只是出於好奇,你是否也知道如何給予偏好sed $ i並獲得修改後的$ i如問題中所示? –

+1

嗯,我會一直這樣做,因爲它是一個腳本,你不需要競爭它,但你可以這樣做:'CMD> $(echo $ file | sed's/fastq.gz/sai/g') ' –