Linux
Pipeline

Data Structure
GFF全称为general feature format,这种格式主要是用来注释基因组。
GTF全称为gene transfer format,主要是用来对基因进行注释。
目前两种文件可以方便的相互转化,比如:使用Cufflinks软件的 的gffread。GTF文件由9列数据组成,这两种文件的前8列都是相同的(一些小的差别),gtf文件是以tab键分割的9列组成,以下为每一列的对应信息:

1.2.1 先创建一个自己的文件夹
mkdir my_folder
1.2.2 下载
1) 下载方法1: 可以从terminal下载:
wget http://www.ncrnalab.org/lulab/public/1.gtf.gz
2) 下载方法2: yeast基因组注释文件可以从浏览器下载:
1.2.3 解压缩
首先将*.gtf.gz放到自己创建的目录下(可以使用cp或者mv命令), 然后解压缩该文件:
gunzip *.gtf.gz
Inputs&#Outputs-Notes
本节内容主要Inputs是以下的Linux命令工具,本教程提供的example文件是1.gtf
,按照前文指导,在docker 目录/home/cs/Bioinfo_Lab/0.Linux
创建自己的文件夹,并下载example文件1.gtf
。(通过example练习,理解并掌握以下这些命令,特别是awk
,cat
,cut
,grep
,wc
的用法其参数的用法是本章学习的重点和难点,也是主要的homework之一。)
cd
awk
less
ls
cat
cut
grep
wc
mkdir
wget
gunzip
cp
Running Scripts
本章内容主要是学会用Linux的一些简单编程方法去查看GTF/GFF基因组注释文件的基本信息,并学会对文件中数据进行提取,利用提取到的数据计算特定feature(例如计算基因积累长度等)。顺利掌握以下操作的前提是,必须熟悉GTF/GFF文件的注释信息,特别是要每一列对应的内容是什么。进行以下操作前,先启动Docker,进入上一章创建的bioinfo容器,并且下载并解压缩本教程配套1.gtf文件(本教程提供的是yeast基因组注释文件)。当做好这些准备工作,开始以下操作(Tips/Utilitie部分对Linux命令行格式及一些参数符号进行简单注释,可供参考)。
注意:如果挂载主机目录,请注意切换工作目录。
step1.查看文件基本信息
尝试输入以下命令,分别查看1.gtf
文件的开头、结尾、文件的大小、行数等基本信息。
less -S 1.gtf | head #显示1.gtf文件前10行
less -S 1.gtf | tail #显示1.gtf文件后10行
less -S 1.gtf | head -n #显示1.gtf文件前n行(输入时n用整数取代)
ls -lh 1.gtf #显示1.gtf文件的大小
wc -l 1.gtf #统计1.gtf文件行数
grep -v "#" 1.gtf | grep -v '^$' | wc -l #排除commend line(以#开头的部分)以及无意义的空白行,所以你需要用grep -v排除那些无意义的行
awk '{if($0!=" ") print}' 1.gtf #过滤空行
grep -v ^# 1.gtf |head -5 #过滤开头注释行commend line(以#开头的部分)并显示前5行
step2.数据提取
首次尝试,先复制以下命令,分别提取1.gtf
文件的特定列、行等数据信息;观察输出结果,然后建议尝试修改以下命令中的参数,进行更多的练习。
2.1 筛选特定的列
#选取1-3列的数据(以下两种命令都可以)
cat 1.gtf | awk ' { print $1, $2, $3 } ' | head
cat 1.gtf | cut -f 1,2,3 | head
Eg.例如我只需要GTF文件的第1,3,4,5行也就是chr,feature,start,end。
cut -f 1,3,4,5 1.gtf | head
2.2 筛选特定的行
# 假设我们想要提取第三列是gene的行,并且只显示第1,3,9这几列信息。
cat 1.gtf | awk '$3 =="gene" { print $3, $5-$4 + 1 } ' |head
Step3.提取和计算特定的feature
这一阶段是在学会step2的基础上,进一步的学习。首次尝试,先复制以下命令,观察输出结果,然后建议尝试修改以下命令中的参数,进行更多的练习。
3.1 提取并统计featrue类型
grep -v ^# 1.gtf |awk '{print $3}'| sort | uniq -c #提取并计数有多少类feature
3.2 计算特定feature特征长度
#*第5列的数值减去第4列的数值后+1,即得到特征feature的长度
cat 1.gtf | awk ' { print $3, $5-$4 + 1 } ' | head
# 计算所有gene的累积长度
cat 1.gtf | awk '$3 =="gene" { len=$5-$4 + 1; size += len; print "Size:", size } ' |head
#计算所有CDS的累积长度
cat 1.gtf | awk '$3 =="CDS" { len=$5-$4 + 1; size += len; print "Size:", size } ' |tail
#计算1号染色体cds的平均长度
awk 'BEGIN {s = 0;line = 0 } ;$3 =="CDS" && $1 =="I" { s += ($5 - $4);line += 1}; END {print "mean=" s/line}' 1.gtf
3.3 分离并提取基因名字
#从gtf文件中分离提取基因名字
cat 1.gtf |awk '$3 == "gene"{split($10,x,";");name = x[1];gsub("\"", "", name);print name,$5-$4+1}'|head
step4.提取数据并存入新文件
这一阶段主要是学会提取数据并存入新文件,例如,寻找长度最长的3个exon, 汇报其长度。
这里介绍两种方法。
第一种是直接提取并计算最长3个exon, 汇报其长度,存入txt
文件;
第二种方法是写一个可执行文件run.sh
,寻找长度最长的3个exon,汇报其长度。
4.1 提取数据存入txt文件示范
输入命令如下,则可将结果存入新文件1.txt
,这里提取并存入的命令是>
。
grep exon 1.gtf | awk '{print $5-$4+1}' | sort -n | tail -3 > 1.txt
然后输入命令less -S 1.txt
或者vi 1.txt
则可进入vi一般模式界面显示输出结果,例如:

vi简单使用教程详见Tips,此时,在英文输入法状态下按
:q
或:wq
可以退回到终端sell窗口。如果docker挂载了主机目录,则可访问主机目录查看1.txt文件。
4.2 可执行文件编辑示范
第一步,输入命令vi run.sh
,进入vi编辑界面。
第二步,按i
键切换至insert模式后,写下rush.sh的文件内容如下:
#!/bin/bash
grep exon *.gtf | awk '{print $5-$4+1}' | sort -n | tail -3
(第一行语句一般用来声明这个脚本使用的shell名称,“#”后的语句可作为批注,在执行时会被忽略)
第三步,按esc
或ctrl+[
切回普通模式,输入:wq
退出vi编辑器,在命令行后键入:
chmod +x run.sh
./run.sh
输出如下所示,与1.txt的内容一致。

Tips/Utilitie
1. Linux命令行格式通常写法如下:
命令 (空格)选项(空格)参数1 参数2...
mv -f folder1 folder2
注意:命令、选项、参数之间一定要用空格来区分!
2. 两种表达方式:短格式 vs 长格式。
① 短格式的命令选项:用一个“-”和一个单个英文字母表示,如“-a”。
② 长格式的命令选项:用两个“-”和一个英文单词表示,如“--help”。
即 ls -h 与 ls --help 或者 ls -a 与 ls --all 所起的作用都是相同的。
3.cd
——进入工作目录
cd #cd后面为空时,进入默认家目录
cd 工作目录名称 #TAB键可进行名称自动补全,推荐经常使用
一般的程序后面都要输入文件位置和名称,告知程序输入和输出是什么:
./filename 指当前目录下的文件 ../filename 指上一级目录下的文件 ../../filename 指上两级目录下的文件.
4."|
"是管道命令操作符,它可以将左边命令传出的正确输出信息(standard output)作为右边命令的标准输入(standard input)。
5.建议在对*.gtf
文件执行的一些命令行Inputs末尾加上| head -n
或者 | tail -n
,然后Outputs会自动显示文件前n行或者后n行;否则,屏幕会被刷屏。
6.星字符:*
可以代表任何字符,称之为wildcard。
7.vi文本编辑器使用,主要就是模式之间的切换,如下图所示。

Homework and more
homework
阅读《鸟哥的Linux私房菜-基础学习篇》(第5-10章推荐章节)
查找、理解并注释上述每一个语句和参数的意义
解释gtf/gff文件中第4、5列($4,$5)代表什么,exon长度应该是$5-$4+1还是$5-$4?
有新的方法加分,但必须注释清楚每个语句和参数的意义和结果。??
more
本章主要参考以下几篇生信数据文章:
https://www.jianshu.com/p/48b5a0972301
https://blog.csdn.net/sinat_38163598/article/details/72851239
https://zhuanlan.zhihu.com/p/36065699
Last updated