目前的情况是一个目录下有许多文件夹,每个文件夹中都是测序返回的 fq 文件,现在要写一个流程对每个样本进行处理,如果一个个地写有点费劲,故写个简单的 shell 命令来完成。
对于每个文件,想要生成的脚本类似这种,包含多行命令,每行命令都包括文件名在内的字符,即输入和输出文件都以文件名有关。
#PBS -N test
#PBS -l nodes=1:ppn=1
#PBS -l walltime=12:00:00
#PBS -q batch
#PBS -S /bin/bash
hisat2 -x /directory/genome_tran -1 /directory/test_1.fq.gz -2 /directory/test_2.fq.gz -S /directory/test.sam
grep 'NH:i:1' /directory/test.sam | grep -v 'ZS:i' > /directory/test_align.sam
想法是:
搞一个文件,每行是一个文件名;
ls > filename
然后读取文件,每一行作为一个变量,将变量写入每行的命令以及生成的文件名中;
写个循环,然后一行一行写;
cat filename |
while read name
do
echo "#PBS -N $name" >> ${name}.pbs
echo "#PBS -l nodes=1:ppn=1" >> ${name}.pbs
echo "#PBS -l walltime=12:00:00" >> ${name}.pbs
echo "#PBS -q batch" >> ${name}.pbs
echo "#PBS -S /bin/bash" >> ${name}.pbs
echo "" >> ${name}.pbs
echo "hisat2 -x /directory/genome_tran -1 /directory/$name/${name}_1.fq.gz -2 /directory/$name/${name}_2.fq.gz -S /directory/$name.sam" >> ${name}.pbs
echo "grep 'NH:i:1' /directory/$name.sam | grep -v 'ZS:i' > /directory/${name}_align.sam" >> ${name}.pbs
done
网友评论