将变量传递给其他程序

时间:2016-04-29 23:39:49

标签: bash

在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

以上代码不会像上面提供的工作代码那样创建单独的文件夹。

1 个答案:

答案 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一次。