0
在bash shell中,我有一個打印一組名稱的變量。現在我想附加一個擴展名。我有以下名稱的序列文件:將變量傳遞給其他程序
Meoh_R1.fastq
Meoh_R2.fastq
R3G_R1.fastq
R3G_R2.fastq
我已經存儲通用名稱(Meoh和R3G在一個變量中)。在bash我運行沒有任何問題下面的腳本:
# Stores common names in variable `i` (meoh and r3g)
for i in $(ls ./raw_reads | grep ^[^d]| rev | cut -c 10- | rev | uniq)
do
# Make direcotry for fastqc
mkdir -p ${i%}_fastqc
# Run fastqc
fastqc -o ./${i%}_fastqc -f fastq ./rnaseq/${i%}_R1.fastq ./rnaseq/${i%}_R2.fastq
done
現在我運行下面的代碼是不工作:
filelist=$(ls ./raw_reads | grep ^[^d]| rev | cut -c 10- | rev | uniq)
mkdir -p ${i%}_fastqc
fastqc -o ./${filelist%}_fastqc -f fastq ./rnaseq/${filelist%}_R1.fastq ./rnaseq/${filelist%}_R2.fastq
上面的代碼不會產生像上面提供的工作代碼單獨的文件夾。
爲什麼你寫'$ {i%}'而不是'$ {i}'?如果你不在後面放任何東西,'%'修飾符不會做任何事情。 – Barmar
您不能將整個文件列表變量放在一個命令行中。它不會自動分割並重復每個元素的命令。你需要像你一樣使用循環。 – Barmar