首页 > 系统相关 >linux 中 shell脚本实现提取gff文件中的最长转录本

linux 中 shell脚本实现提取gff文件中的最长转录本

时间:2023-07-02 22:35:42浏览次数:43  
标签:shell grep ## sum awk result linux gff

 

001、数据和脚本

[root@PC1 test2]# ls
GCF_001704415.1_ARS1_genomic.gff  record.sh

 

002、脚本

[root@PC1 test2]# cat record.sh        ## 脚本内容
#!/bin/bas

## step1: eliminate the influence of pseudogene
grep -v "^#" GCF_001704415.1_ARS1_genomic.gff | awk -F "\t" 'BEGIN{tag = "yes"}{if($3 == "pseudogene") {tag = "no"}; if($3 == "gene") {tag = "yes"}; if(tag == "yes") {print $0}}' > result.gff

## step2: exclude the genes without exon
awk -F "\t" 'BEGIN{sum = 0}{if($3 == "gene"){sum++} else {sum = 0}; if(sum > 1) {print NR - 1}}' result.gff | while read i
do
        sed -i "$i s/^/detele_tag\t/" result.gff
done
sed -i '/detele_tag\t/d' result.gff

## step3:
num=0
awk -F "\t" '$3 == "gene"{print $NF}' result.gff | cut -d ";" -f 1 | while read i
do                                                                ## 提取基因ID
        let num=$num+1
        check1=$(grep "$i;" result.gff | wc -l)
        if [ $check1 -ne 1 ]
        then
                echo "$i layer1 check"
                exit
        fi
        grep "$i;" result.gff >> 001.gff              ## 基因ID 写入文件
        str1=$(grep "$i;" result.gff | awk -F "\t" '{print $NF}' | cut -d ";" -f 1 | cut -d "=" -f 2)
        check2=$(grep "Parent=$str1;" result.gff | wc -l)
        echo "$i: $check2" >> 002.txt ## 记录每个基因的转录本数目
        if [ $check2 -lt 1 ]
        then
                echo "$i layer 2 check"
                exit
        fi
        grep "Parent=$str1;" result.gff > tmp
        for j in $(seq $check2)
        do                                                ## 提取每一个转录本的ID
                str2=$(sed -n "$j"p tmp | awk -F "\t" '{print $NF}' | cut -d ";" -f 1 | cut -d "=" -f 2)
                check3=$(grep "Parent=$str2;" result.gff | awk -F "\t" '$3 == "exon"' | wc -l)
                if [ $check3 -eq 0 ]
                then
                        echo "$i layer3 check"
                        exit
                fi
                sed -n "$j"p tmp >> 001.gff             ## 转录本ID写入文件
                grep "Parent=$str2;" result.gff | awk -F "\t" '$3 == "exon"' >> 001.gff  ## 外显子写入文件
                grep "Parent=$str2;" result.gff | awk -F "\t" '$3 == "exon"' | awk -v a=$i -v b=$str2 'BEGIN{sum = 0} {OFS = "\t"; sum += ($5 - $4 + 1)} END {print a, b, sum}' >> 003.txt
        done                                        ## 统计每一个转录本的长度并写入文件
        rm -f tmp
        echo $num done
done

 

 

标签:shell,grep,##,sum,awk,result,linux,gff
From: https://www.cnblogs.com/liujiaxin2018/p/17521572.html

相关文章

  • Linux |权限|Umask和Chmod
    目录权限掩码查看权限更新权限踩过的坑权限掩码文件的默认权限为0666文件夹的默认权限为0777掩码的作用是用户在创建文件/文件夹时从文件的默认权限中去除掩码中的权限umask输出0002umask-S输出u=rwx,g=rwx,o=rxumask0111临时生效,作用于当前shell后续新建的文件/文件夹e......
  • Linux|常用命令|SSH远程执行Shell
    #bash/python命令语法#ssh语法同bash/python不同,避免混淆bashscript.shparams4scriptpythonscript.pyparams4scriptbash-c""bash-c''python-c''python-c""一行和多行只是写法不同打包成函数和文件没有本质区别注意Shell会解释输入,转译字符、变量生效推......
  • Linux训练营(用户和权限管理)
    (文章目录)前言本篇文章继续讲解一下Linux中常用的命令,用户和权限管理。一、useradd命令useradd命令是在Linux和Unix操作系统上用于创建新用户的命令。它允许系统管理员在系统上创建一个新的用户账户。下面是对useradd命令的详细解释:基本语法:useradd[选项]用户名主要选......
  • 最强优化指令大全 | 【Linux技术专题】「系统性能调优实战」终极关注应用系统性能调优
    Linux命令相关查看指标CPU指标vmstat指令vmstat-nm该命令用于每隔n秒采集系统的性能统计信息,共采集m次。[root@svr01]$vmstat13procs-----------memory-------------swap-------io------system-------cpu-----rbswpdfreebuffcachesiso......
  • [Linux][报错解决] Centos8发行版 运行locale和man报错
    报错信息先是运行manls时,Nomanualentryforls然后运行locale时,cannotsetLC_XXXtodefaultlocale:Nosuchfileordirectoryterminalmessage前因###运行manls时出现Nomanualentryforls,因为没有安装man-pages运行manls时出现man:can'tsettheloca......
  • Linux三剑客grep、sed、awk(包括练习题)
    Linuxgrep、sed、awk(包含练习题)一、grepLinuxgrep(globalregularexpression)命令用于查找文件里符合条件的字符串或正则表达式。基本用法与常见的正则表达式grep[options]pattern[files]命令 参数 匹配模式 文件数据 -i:忽略大小写进行匹配。 -v:反向查找,只......
  • ​Centos Linux 上搭建Apache服务器
    搭建Apache服务器  配置准备:网络     检查 配置问题解决  Centos7最小化安装报错Therearenoenabledrepos.Run"yumrepolistall"toseethereposyouhave.解决办法  身份切换到root账户,进入vim/etc/sysconfig/network-scripts/ifcfg-ens33修改文件,将ONBO......
  • Linux 图形栈从入门到放弃 --- Linux 图形相关概念简介
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。环境说明  无前言  在日常生活中,像我们常用的ubuntu(Linux),windows,android,mac等等系统,我们都能够看到丰富的图形界面。此外,如果大家了解过以前的嵌入式系统,很多......
  • Linux Subreaper 机制及内核态逃离方法(PR_SET_CHILD_SUBREAPER, prctl, systemed)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。环境说明  无前言  由于某些其他的原因,我们在测试另外一个问题的时候发现了一个奇怪的现象:在我们一直朴素的认知下,如果一个程序创建了parent-process和child-......
  • LinuxDNS分析从入门到放弃(记一次有趣的dns问题排查记录,ping 源码分析,getaddrinfo源码
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。环境说明  ubuntu18.04前言  我们这里有一块嵌入式板卡,当我们通过PING测试内网IP时,发现外网IP访问正常,但是测试域名访问一直报unknownhost。一般来说,在ubun......