群体遗传学

MISA+Primer3设计SSR引物(三):批量化运行的可接续

2021-11-22  本文已影响0人  学生信的大叔

原计划本次内容是按自己思路修改的msia脚本写一个shell脚本,但是看我推文的大部分都是搜索过来的,看到这篇推文大部分还是打算学这个流程的。所以,本次流程的脚本还是在原misa脚本基础上书写。以我改的msia脚本为基础的shell脚本放在最后一部分,不做介绍。

另外,我不建议用我前面的教程去做科研任务,学习下脚本应该就可以了。

另外,我不建议用我前面的教程去做科研任务,学习下脚本应该就可以了。

另外,我不建议用我前面的教程去做科研任务,学习下脚本应该就可以了。

本教程不直接提供脚本,不过你看看参考部分,可能会有惊喜!

本教程shell脚本分为几个部分

用到的知识点;基础msia流程;可接续的shell脚本;以我改的misa脚本教程为基础的shell脚本;致谢;参考

知识点介绍

知识点一:
sh -c "字符串":在脚本里重新调用一个shell,来解析被当成字符串的命令。

知识点二:

if 语句中

-a 表示逻辑 "与";-o 表示逻辑 "或"; ! 表示逻辑 "非"; 三种逻辑顺序级别由高到底:! > -a > -o

-f 表示文件存在;-d 表示文件夹存在;

知识点三:

子函数书写形式之一:

function misa_check(){
  command
}
#其内输入参数可用$1,$2…等表示

知识点四:

流程的可接续写法:

if [ -d "$1" ]

  then

   echo "$1 exist!" && sleep 1s && break

  else

   sh -c "$2" && mkdir -p __tmp_${FASTA}/$1

   echo -e "DONE: $2 !"

 fi

基础MISA流程

primer3设置文件见参考文章部分

FASTA=test.fasta
perl  misa.pl  ${FASTA}
perl  p3_in.pl  ${FASTA}.misa
#引物设计时间会很久
./primer3-2.3.5/src/primer3_core -default_version=1 -p3_settings_file=my_default_settings.txt.txt -output=${FASTA}.p3out  ${FASTA}.p3in
perl p3_out.pl  ${FASTA}.p3in  ${FASTA}.misa

可接续的shell脚本

#!usr/bin/env sh
set -euo pipefail

##Description: My pipline for misa v1.0 and primer3 2.3.5 of linux platform
##用法:以下文件需要放到该shell脚本同文件夹下
##      需要将fasta文件, primer3的配置文件 放到与shell脚本同文件夹下;
##      misa.pl, p3_in.pl, p3_out.pl等脚本 放到与shell脚本同文件夹下;
##      然后修改全局变量位置即可。

###-------------------------------------------
###全局设置
###-------------------------------------------
FASTA=./test/test.fa #文件位置
PRIMER3_CORE=./primer3-2.3.5/src/primer3_core  #primer3_core位置
PRIMER3_SETTING=./my_default_settings.txt
#记得修改 my_default_settings.txt
###-------------------------------------------
###输入输出对象检查
###-------------------------------------------
# check the scripts, input file and output path
## check the scripts
### -a 表示逻辑 "与";-o 表示逻辑 "或"; ! 表示逻辑 "非"; 三种逻辑顺序级别由高到底:! > -a > -o 
### -f 表示文件存在;-d 表示文件夹存在;
if [ -f  "misa.pl"   -a -f  "p3_in.pl"  -a -f   "p3_out.pl" ]   #-e表示文件存在,-a 表示逻辑 "与"
then
    echo -e "the misa scripts is ready!\n" && sleep 1s
else
    echo -e "the misa scripts not found!\n"
    exit 1
fi

## check the fasta file!
if [ -f $FASTA ]
then
    echo -e "input file: $FASTA is ready!\n" && sleep 1s
    sleep 1s 
else
    echo "input file: $FASTA not found!"
    exit 1
fi

function misa_check(){
   if [ -d "$1" ]
   then
      echo "$1 exist!" && sleep 1s && break
   else
      sh -c "$2" && mkdir -p __tmp_${FASTA}/$1
      echo -e "DONE: $2 !"
   fi
}
misa_check   misa.pl.ok "perl  misa.pl  ${FASTA} >  /dev/null 2>&1"
misa_check  p3_in.pl.ok "perl  p3_in.pl  ${FASTA}.misa"
misa_check  primer3.ok  "./primer3-2.3.5/src/primer3_core -default_version=1 -p3_settings_file=${PRIMER3_SETTING} -output=${FASTA}.p3out  ${FASTA}.p3in"
misa_check p3_out.pl.ok  "perl  p3_out.pl  ${FASTA}.p3out ${FASTA}.misa"
rm -rf __tmp_${FASTA}
echo "DONE:SSRs searching and primers designing of ${FASTA}!"

以我改的misa脚本教程为基础的shell脚本(该流程初学者不建议看,容易晕)

#!usr/bin/env sh
set -euo pipefail
###-------------------------------------------
###全局设置
###-------------------------------------------
## 记得修改 my_default_settings.txt
##path of programme
MISA_PATH=./misa
PRIMER3_CORE=primer3_core
PRIMER3_SETTING=my_default_settings.txt
##input file
FASTA=./fasta/test.fa
##output path
RESULT_PATH=./results/


## every result
filename=$(basename $FASTA)
EVERY_RESULT=$RESULT_PATH/$filename
mkdir -p $RESULT_PATH/$filename

###-------------------------------------------
###输入输出对象检查
###-------------------------------------------
# check the scripts, input file and output path
## check the scripts
if [ -f  "$MISA_PATH/misa.pl"   -a -f  "$MISA_PATH/p3_in.pl"  -a -f   "$MISA_PATH/p3_out.pl" -a  ]   #-e表示文件存在,-a 表示逻辑 "与"
then
    echo -e "the misa scripts is ready!\n" && sleep 1s
    sleep 1s
else
    echo -e "the misa scripts not found!\n"
    exit 1
fi

## check the fasta file!
if [ -f $FASTA ]
then
    echo -e "input file: $FASTA is ready!\n" && sleep 1s
    sleep 1s 
else
    echo "input file: $FASTA not found!"
    exit 1
fi

if [ -f  ${PRIMER3_SETTING} ]
then
    echo -e "input file: ${PRIMER3_SETTING} is ready!\n" && sleep 1s
    sleep 1s 
else
    echo "input file: ${PRIMER3_SETTING} not found!"
    exit 1
fi

## check the output path
if [ -d $EVERY_RESULT ]
then
    echo -e "output path: $EVERY_RESULT is ready!\n"  && sleep 1s
else
    echo "output path: $EVERY_RESULT not found!"
    exit 1
fi

###-------------------------------------------
###运行程序
###-------------------------------------------
# SSRs searching and primers designing
function misa_check(){
   if [ -d "$1" ]
   then
      echo "$1 exist!" && sleep 1s && break
   else
      sh -c "$2" && mkdir -p __tmp_${FASTA}/$1
      echo -e "DONE: $2 !"
   fi
}

misa_check misa.pl.ok "perl ${MISA_PATH}/misa.pl ${MISA_PATH}/misa.ini $FASTA ${EVERY_RESULT} > /dev/null 2>&1 " #输出到黑洞
misa_check p3_in.pl.ok "perl ${MISA_PATH}/p3_in.pl   ${EVERY_RESULT}/${filename}.misa  ${FASTA}  ${EVERY_RESULT} > primer3_parameters_${filename}.txt"
misa_check primer3.ok "$PRIMER3_CORE -default_version=1 -p3_settings_file=${PRIMER3_SETTING} -output=${EVERY_RESULT}/${filename}.p3out ${EVERY_RESULT}/${filename}.p3in"
misa_check p3_out.pl.ok  "perl ${MISA_PATH}/p3_out.pl ${EVERY_RESULT}/${filename}.p3out ${EVERY_RESULT}/${filename}.misa ${EVERY_RESULT}"
rm -rf __temp_${filename}
echo "SSRs searching and primers designing of $filename have been completed!"

致谢

感谢生信技能树的司徒老师的答疑;感谢福建农林的史同学让我发现了新的问题。

参考

  1. primer3设计引物详解 http://www.chenlianfu.com/?p=284

  2. 使用Misa结合Primer3来批量设计SSR引物 http://www.chenlianfu.com/?p=255

  3. SSR (misa + primer3 ) 设计SSR引物 https://blog.csdn.net/wt141643/article/details/113878893

  4. 《Bioinformatics Data Skills》之编写与运行鲁棒的bash脚本 https://www.jianshu.com/p/6bf09e8da73f

上一篇下一篇

猜你喜欢

热点阅读