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