在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
以上代码不会像上面提供的工作代码那样创建单独的文件夹。
答案 0 :(得分:1)
这是一种没有循环的方法:
filelist=$(ls ./raw_reads | grep ^[^d]| rev | cut -c 10- | rev | uniq)
echo "$filelist" | sed 's/.*/&_fastqc/' | xargs mkdir -p
echo "$filelist" | xargs -I{} fastqc -o ./{}_fastqc -f fastq ./rnaseq/{}_R1.fastq ./rnaseq/{}_R2.fastq
这与循环具有相同的效果,但是在每个输入文件上运行fastqc一次。