By liyupeng, 30 July, 2025
Forums

脚本ltr.sh:鉴定长末端重复序列

  1. 这个脚本是为了自动化地鉴定长末端重复序列而设计的shell脚本,配合镜像;repeat_mark3b能够实现自动化鉴定这类重复序列,合并然后生成最后的结果文件。
  2. 基本参数都已经设置好了,实际上差不多就是一个敲过的命令行的合集,制作成shell脚本后,能够省去一些敲键盘的重复性工作,节省精力and时间。
  3. 参考文档:https://www.kdocs.cn/l/caE41kwA97SB
  4. 参数设定
    1. i,指定输入的fasta序列
    2. t,指定线程数量
  5. 最终输出文件
    1. target.harvest.scn #ltr_harvest的预测结果
    2. target.fasta.finder.combine.scn #ltr_finder的预测结果
    3. all.scn #整合上面两个预测结果的ltr重复序列库
    4. target.fasta.masked #屏蔽了ltr后的基因组序列
    5. target.rmmasked.fasta #删除了呗屏蔽的ltr重复序列部分后的序列
  6. 示例命令
nohup bash ltr2.sh -i target.fasta -t 20 &
  1. ltr2.sh
#!/bin/bash

# 初始化变量
input=""
threads=""

# 使用 getopts 来处理 -i 和 -t 参数,将参数后面的值付给变量
while getopts "i:t:" opt; do
    case $opt in
        i)  # 处理 -i 参数
            input=$OPTARG  # 将 -i 参数后面的值存储在变量 input 中
            ;;
        t)  # 处理 -t 参数
            threads=$OPTARG  # 将 -t 参数后面的值存储在变量 threads 中
            ;;
        \?)  # 处理无效参数
            echo "无效参数:-$OPTARG"
            exit 1
            ;;
    esac
done

mkdir -p "${input}_dir"

#原本打算在cp的时候顺便改个名,结果无法执行,这一部分只能拆开来分成两步走
cp $input target.fasta
mv target.fasta "${input}_dir"
cd "${input}_dir"


#参考文章:https://www.jianshu.com/p/f7c0115e1d89
#第一部分,LTRs鉴定
#创建ltr_repeat文件夹,ltrs的鉴定放在该文件夹下方
mkdir ltr_repeat
cd ltr_repeat

#ltr_finder_parallel鉴定ltrs,输出文件:target.fasta.finder.combine.scn
#参数设定依据:https://github.com/oushujun/LTR_FINDER_parallel?tab=readme-ov-file
/home/soft/LTR_FINDER_parallel/LTR_FINDER_parallel -seq ../target.fasta -threads $threads -w 2 -C -D 15000 -d 1000 -L 7000 -l 100 -p 20 -M 0.85 -harvest_out &

#ltrharvest建立索引
gt suffixerator -db ../target.fasta -indexname target -tis -suf -lcp -des -ssp -sds -dna

#ltrharvest鉴定ltrs,输出文件:target.harvest.scn
gt ltrharvest -index target -similar 85 -vic 10 -seed 20 -seqids yes -minlenltr 100 -maxlenltr 7000 -mintsd 4 -maxtsd 6 -motif TGCA -motifmis 1 > target.harvest.scn  &

#在两个ltr后面加上&,后台运行,wait等待两个ltr完成运行后再继续运行后面的命令
wait

#合并ltrharvest和ltr_finder_parallel鉴定出来的两个库文件
cat target.fasta.finder.combine.scn target.harvest.scn > all.scn

#用ltr_retriever对两个库文件进行合并,然后屏蔽,得到ltrs的库文件和第一次屏蔽后的重复序列
/home/soft/LTR_retriever/LTR_retriever -genome target.fasta -inharvest all.scn -threads $threads

#对库文件进行重命名
mv *.LTRlib.fa LTR.lib
chmod 777 LTR.lib
cp LTR.lib ..

#将经过屏蔽的基因组文件中的重复序列(N)删除掉
tr -d 'nN' < target.fasta.masked | seqkit seq > target.rmmasked.fasta
cp target.rmmasked.fasta ..

#高量化部分重要中间文件,便于后续检查
chmod 777 target.harvest.scn target.fasta.finder.combine.scn all.scn target.fasta.masked target.rmmasked.fasta

cd ../../