vim编辑器
Vim 编辑器:大多数Linux都会自带的文本编辑器。
功能强大:代码补全、编译及错误跳转等方便编程的功能特别
丰富,在程序员中被广泛使用。
功能强大到其官方现在对自己的定位是“程序开发工具”
Vim 编辑器:三种模式
命令模式
- 方向键或者hjkl
- ^和$:快速到所在行的开头和末尾(用0也可以到开头)
- 30j:向下移动30行(数字+方向进行快速移动)
- ctrl+f或b:上下翻页(forward/back)
- gg:快速回到文档的第一行的第一个字符
- G:快速到文件底部
剪切、复制与粘贴: - x:剪切一个字符
- 10x:连续剪切10个字符(numberx)
- dd:剪切所在行
- 10dd:剪切所在行及向下共10行
- yy:复制光标所在行
- 10yy:复制所在行及下面10行
- p或P:在当前行的下面/上面进行粘贴
撤销动作(后悔药): - u:复原前一个动作(可连续撤销)
- ctrl+r:重做上一个动作
编辑模式
输入i后进入编辑模式(左下角有-- INSERT --提示)
- 其实有多种进入的模式(i/a/o/I/A/O),但是记住一种即可
- 按esc键退出该模式
- 在编辑模式下即可正常的编辑、修改文本内容
末行模式
- 在命令模式下输入一个:进入这一模式
注意需要是英文的冒号,中文的冒号(全角)输入不进来 - 按esc键退出该模式
- 在该模式下可以设置、查询、替换、保存并退出
保存与退出
- :wq 保存并退出
- :q 直接退出
- :q! 不保存修改,强制退出
- :wq! 保存并强制退出(极少用)
tips:所有字符均要以英文输入法(半角)输入!
全角字符这种高级货色歪果仁是不认识滴~
set系列命令
- :set nu 显示行号
- :set nonu 取消行号
- :set list 显示不可见字符(分辨制表符与空格)
- :set ff=unix 将文件格式转换为unix格式
查询
- 输入/KEYWORD进行查询
- 按n向下查找
- 按N向上查找
替换
- :%s///g 全局替换,g:global;按u撤销操作
- :s///g 替换光标所在行所有的;按u撤销操作
- :s/// 只替换光标所在行第一次出现的;按u撤销操作
尽量不要把文件放在windows下面编辑再用linux打开
Vim 编辑器:
输入vimtutor zh_CN 可以查看帮助文档;命令模式的所有操作都可以使用
生物信息学常见数据格式
fasta
fasta 是一种基于文本用于表示核酸序列或多肽序列的格式。其中核酸或氨基酸均以单
个字母来表示,且允许在序列前添加序列名及注释。
特征: 2行, id行和序列行.
id行以“>”开头, 有时候会包含注释信息
序列行一个字母表示一个碱基/氨基酸
直到下一个id行为止
A、T、C、G、N
20种常见氨基酸
fastq
fastq 是一种存储了生物序列以及相应的质量评价的文本格式。
特征: 4行
https://support.illumina.com/bulletins/2016/04/fastq-filesexplained.
html
想了解更多可以查看
gff
gff格式记录序列中转录起始位点、基因、外显子、内含子等组成元件在染色体中的位置信息
- seqid :序列的id。(The name of the sequence where the feature is located.)
2)source:注释的来源,一般指明产生此gff3文件的软件或方法(e.g. Augustus or RepeatMasker)。如果未知,则用点(.)代替。
3)type: 类型,此处不受约束,但为下游分析方便,建议使用gene,repeat_region,exon,CDS,或SO对应编号等。
4)start:起始位置,从1开始计数(区别于bed文件从0开始计数)。
5)end:终止位置。
6)score:得分,注释信息可能性说明,可以是序列相似性比对时的E-values值或者基因预测是的P-values值。”.”表示为空。
(indicates the confidence of the source on the annotated feature)
7)strand:“+”表示正链,“-”表示负链,“.”表示不需要指定正负链,“?” 表示未知.
8)phase :步进。仅对编码蛋白质的CDS有效,本列指定下一个密码子开始的位置。可以是0、1或2,表示到达下一个密码子需要跳
过碱基个数。
9)attributes:属性。一个包含众多属性的列表,格式为“标签=值”(tag=value),不同属性之间以分号相隔。
现在用得比较多的是第2版,即gtf2
1) seqname: 序列的名字。通常格式染色体ID或是contig ID。
2) source:注释的来源。通常是预测软件名或是公共数据库。
3) start:起始位置,从1开始计数。
4) end:终止位置。
5) feature :基因结构.根据所使用软件不同,feature types必须注明。CDS,start_codon,stop_codon是一定要含有的类型。
6) score :这一列的值表示对该类型存在性和其坐标的可信度,不是必须的,可以用点“.”代替。
7) strand:链的正向与负向,分别用加号+和减号-表示。
8) frame:密码子偏移,可以是0、1或2。
9) attributes:必须要有以下两个值:
gene_id value: 表示转录本在基因组上的基因座的唯一的ID。gene_id与value值用空格分开,如果值为空,则表示没有对应的基
因。
transcript_id value: 预测的转录本的唯一ID。transcript_id与value值用空格分开,空表示没有转录本。
文本处理三驾马车
grep:一种强大的文本搜索工具,它能使用正则表达式匹配模式搜索文本,并把匹配的行打印出来。
注意是行!!!
格式:grep [options] pattern file
常见参数:
-w:word 精确查找某个关键词pattern
-c:统计匹配成功的行的数量
-v:反向选择,即输出没有没有匹配的行
-n:显示匹配成功的行所在的行号
-r:从目录中查找pattern
-e:指定多个匹配模式
-f:从指定文件中读取要匹配的pattern
-i:忽略大小写
正则表达式:是我们认识这个世界的哲学
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
^ 行首
$ 行尾
. 换行符之外的任意单个字符
? 匹配之前项0次或者一次
- 匹配1次或者多次
-
匹配0次或者多次
{n} 匹配n次
{n,} 匹配至少n次
{m,n} 至少m,最多n
[] 匹配任意一个
[^] 排除字符
| 或者
1:
(base) Mar23 22:58:58 ~/Data
$ cat Homo_sapiens.GRCh38.102.chromosome.Y.gff3 |grep -w 'gene' | less -SN
(base) Mar23 22:59:21 ~/Data
$ cat Homo_sapiens.GRCh38.102.chromosome.Y.gff3 | cut -f 3 | less -SN
(base) Mar23 23:00:37 ~/Data
$ cat Homo_sapiens.GRCh38.102.chromosome.Y.gff3 | cut -f 3 | grep -v '#' | less -SN
(base) Mar23 23:01:42 ~/Data
$ cat Homo_sapiens.GRCh38.102.chromosome.Y.gff3 | cut -f 3 | grep -v '#' | grep -w 'gene' | less -SN
(base) Mar23 23:02:07 ~/Data
$ cat Homo_sapiens.GRCh38.102.chromosome.Y.gff3 | cut -f 3 | grep -v '#' | grep -c -w 'gene' | less -SN
2:
$ cat Homo_sapiens.GRCh38.102.chromosome.Y.gff3 | cut -f 3 | grep -v '#' | sort | uniq -c
290 biological_region
1568 CDS
1 chromosome
4285 exon
222 five_prime_UTR
47 gene
258 lnc_RNA
149 mRNA
7 ncRNA
92 ncRNA_gene
382 pseudogene
382 pseudogenic_transcript
3 snoRNA
17 snRNA
196 three_prime_UTR
3:
$ cat Homo_sapiens.GRCh38.102.chromosome.Y.gff3 | grep -v -w 'exon' | less -SN # exon是-w的参数,不能分开写
4:
$ cat Homo_sapiens.GRCh38.102.chromosome.Y.gff3 | grep -w -e 'exon' -e 'five_prime_UTR' | less -SN
5:
$ cat example.fq | grep -c '@'
1502
6:
$ wc -l example.fq
4000 example.fq #因为fq文件以4为单位,说明该文件包含1000条序列
$ cat example.fq | grep -c '^@'
1006 #说明有其他信息混杂进来
(base) Mar23 23:23:54 ~/Data
$ cat example.fq | grep '^@' | grep -v '^@ERR'
@;;@=BBBBBB??=?DD==8CBB@=>BBA=8=@@;DBDBBBEEBEGGGDBEEBBEGDGG@4.+?88BB<?
@HHHFHGHEHHGHHD;@EDFBDBBGGGDG?GGEBEGEGGGGGEBE<F8F<>A>A>GGAGA??>A######
@E<?GGGGBGGBGBDEED<DE<DEBDG@GE>>B;;BEEB=??2>CACAC?>B??????CE??E8?G@DD#
@BGDGBGEGEFGGHHHGHGH=GGGGHHHHHHDHFHHGDGHHHHHHHHHHHHDGDHHGHHHHHHHFHGHGH
@@;@=BDDBDDGE4GG?FGGG<GBDEEDEEHGHHFHHHHHHHFHHGGGGGHHHFHHHGHHHEHHHEGEGG
@GBGG?CEEDEB:E8ED>:EBD=@D6=5=<AA>A1CC>E###############################
(base) Mar23 23:24:12 ~/Data
$ cat example.fq | grep '^@' | grep -c -v '^@ERR'
6
sed
sed:流编辑器,一般用来对文本进行增删改查
用法:
sed [-options] 'script' file(s)
[address][!] command
常见参数:
-n :取消默认输出,只显示经过sed处理或匹配的行(常用)
-e :直接在命令模式上进行sed 的动作编辑,接要执行的一个或者多个命令,举例如下:
(base) Mar23 11:47:06 ~/Data
$ cat readme.txt | sed -e '2i Welcome to Biotrainee()' -e '2a Welcome to Biotrainee() '
Welcome to Biotrainee() !
Welcome to Biotrainee()
This is your personal account in our Cloud.
Welcome to Biotrainee()
Have fun with it.
Please feel free to contact me( email to jmzeng1314@163.com )
(http://www.biotrainee.com/thread-1376-1-1.html)
(base) Mar23 11:58:55 ~/Data
$ cat readme.txt | sed '2,4i *********'
Welcome to Biotrainee() !
*********
This is your personal account in our Cloud.
*********
Have fun with it.
*********
Please feel free to contact me( email to jmzeng1314@163.com )
(http://www.biotrainee.com/thread-1376-1-1.html)
(base) Mar23 11:59:33 ~/Data
$ cat readme.txt | sed -e '2,4i *********' -e '2,4d'
Welcome to Biotrainee() !
*********
*********
*********
(http://www.biotrainee.com/thread-1376-1-1.html)
-i :直接修改读取的文件内容,不输出。
常见'script' address :
2 ∶第2 行
2,4 ∶第2 行到第4 行
2, 表示最后
2~3 ∶从第2 行开始,每隔3 行取一行
2,+4 ∶从第2 行到2+4 行
/pattern/ :匹配上pattern 的行
[!] :表示否定,取反
常见'script' command :
a∶append,在指定行的后增加一行,内容为a 的后面接的字串
(base) Mar23 09:37:39 ~/Data
$ cat readme.txt | sed '1a Welcome to Biotrainee() '
Welcome to Biotrainee() !
Welcome to Biotrainee()
This is your personal account in our Cloud.
Have fun with it.
Please feel free to contact me( email to jmzeng1314@163.com )
(http://www.biotrainee.com/thread-1376-1-1.html)
i∶insert,在指定行的前增加一行(在原始文件基础上进行),内容为i 的后面接的字串
(base) Mar23 09:38:09 ~/Data
$ cat readme.txt | sed '1,2i Welcome to Biotrainee() '
Welcome to Biotrainee()
Welcome to Biotrainee() !
Welcome to Biotrainee()
This is your personal account in our Cloud.
Have fun with it.
Please feel free to contact me( email to jmzeng1314@163.com )
(http://www.biotrainee.com/thread-1376-1-1.html)
d∶delete,删除某一行或者某几行,也可以指定删除匹配上的行
$ cat readme.txt | sed '1,3d'
Please feel free to contact me( email to jmzeng1314@163.com )
(http://www.biotrainee.com/thread-1376-1-1.html)
c∶change,改变指定行的内容
s∶替换,使用格式为's/pattern/new/[flags]',把pattern替换
$ cat readme.txt | sed 's/is/IS/g'
Welcome to Biotrainee() !
ThIS IS your personal account in our Cloud.
Have fun with it.
Please feel free to contact with me( email to jmzeng1314@163.com )
(http://www.biotrainee.com/thread-1376-1-1.html)
$ cat readme.txt | sed 's/is/IS/2'
Welcome to Biotrainee() !
This IS your personal account in our Cloud.
Have fun with it.
Please feel free to contact with me( email to jmzeng1314@163.com )
(http://www.biotrainee.com/thread-1376-1-1.html)
$ cat readme.txt | sed '1s/ee/EE/'
Welcome to BiotrainEE() !
This is your personal account in our Cloud.
Have fun with it.
Please feel free to contact me( email to jmzeng1314@163.com )
(http://www.biotrainee.com/thread-1376-1-1.html)
$ cat readme.txt | sed '1~3s/ee/EE/' # 每隔3行替换
Welcome to BiotrainEE() !
This is your personal account in our Cloud.
Have fun with it.
Please fEEl free to contact me( email to jmzeng1314@163.com )
(http://www.biotrainee.com/thread-1376-1-1.html)
(base) Mar23 13:07:20 ~/Data
$ cat readme.txt | sed '/www/s/ee/EE/' #在含有www的行里匹配ee为EE
Welcome to Biotrainee() !
This is your personal account in our Cloud.
Have fun with it.
Please feel free to contact me( email to jmzeng1314@163.com )
(http://www.biotrainEE.com/thread-1376-1-1.html)
(base) Mar23 13:15:38 ~/Data
$ cat readme.txt | sed -n '/ee/p' #不把内容全部打印出来,只打印匹配出的行
Welcome to Biotrainee() !
Please feel free to contact me( email to jmzeng1314@163.com )
(http://www.biotrainee.com/thread-1376-1-1.html)
对比
(base) Mar23 13:18:39 ~/Data
$ cat readme.txt | sed '/ee/p'
Welcome to Biotrainee() !
Welcome to Biotrainee() !
This is your personal account in our Cloud.
Have fun with it.
Please feel free to contact me( email to jmzeng1314@163.com )
Please feel free to contact me( email to jmzeng1314@163.com )
(http://www.biotrainee.com/thread-1376-1-1.html)
(http://www.biotrainee.com/thread-1376-1-1.html)
不打印原文,只打印匹配出来的
(base) Mar23 13:20:21 ~/Data
$ cat readme.txt | sed -n 's/ee/EE/p'
Welcome to BiotrainEE() !
Please fEEl free to contact with me( email to jmzeng1314@163.com )
(http://www.biotrainEE.com/thread-1376-1-1.html)
(base) Mar23 13:22:19 ~/Data
成new,默认只替换一个,可以指定flags
y∶转换,实现字符一对一转换,格式'y/inchars/outchars/'
(base) Mar23 13:23:48 ~/Data
$ cat readme.txt | sed 'y/abcde/ABCDE/'
WElComE to BiotrAinEE() !
This is your pErsonAl ACCount in our ClouD.
HAvE A fun with it.
PlEAsE fEEl frEE to ContACt with mE( EmAil to jmzEng1314@163.Com )
(http://www.BiotrAinEE.Com/thrEAD-1376-1-1.html)
p∶print,把匹配或修改过的行打印出来,通常与–n参数合用
1:
$ cat readme.txt | sed '1~2 c ***'
***
This is your personal account in our Cloud.
***
Please feel free to contact me( email to jmzeng1314@163.com )
***
2:
(base) Mar23 19:35:23 ~/Data
$ cat readme.txt | sed 's/[a-z]/\u&/g'
WELCOME TO BIOTRAINEE() !
THIS IS YOUR PERSONAL ACCOUNT IN OUR CLOUD.
HAVE A FUN WITH IT.
PLEASE FEEL FREE TO CONTACT WITH ME( EMAIL TO JMZENG1314@163.COM )
(HTTP://WWW.BIOTRAINEE.COM/THREAD-1376-1-1.HTML)
删除前五个字符:
(base) Mar23 19:36:00 ~/Data
$ cat readme.txt | sed -E 's/.{5}//'
me to Biotrainee() !
is your personal account in our Cloud.
fun with it.
e feel free to contact me( email to jmzeng1314@163.com )
://www.biotrainee.com/thread-1376-1-1.html)
1:
$ head example.gtf
2:
$ head example.gtf | sed 's/HAVANA/ENSEMBL/'
3:
(base) Mar23 20:22:31 ~/Data
$ head example.fa | sed '2,$ y/ATCG/TAGC/'
awk
也称gawk,编程语言,可对文本和数据进行处理
常见参数:
-F,fields,设置字段分隔符(默认是空白字符);
$ cat example.gtf | awk -F '\t' '{print $9}' | less -S
# 输出结果和cat一样,指定分隔符为tab
-v,var=value 定义awk程序中的一个变量及其默认值
用法:
awk [options] '{script}' file
基础结构: ' {script} '
(base) Mar23 14:38:05 ~/Data
$ cat example.gtf | awk '{print $1,$2,$3}' | head
chr1 ENSEMBL UTR
chr1 ENSEMBL exon
chr1 ENSEMBL transcript
chr1 HAVANA gene
chr1 HAVANA exon
chr1 HAVANA transcript
chr1 HAVANA exon
chr1 HAVANA exon
chr1 ENSEMBL UTR
chr1 ENSEMBL exon
可以随调换顺序,而cat不可以
(base) Mar23 14:50:12 ~/Data
$ cat example.gtf | awk '{print $9,$2,$1}' | head
gene_id ENSEMBL chr1
gene_id ENSEMBL chr1
gene_id ENSEMBL chr1
gene_id HAVANA chr1
gene_id HAVANA chr1
gene_id HAVANA chr1
gene_id HAVANA chr1
gene_id HAVANA chr1
gene_id ENSEMBL chr1
gene_id ENSEMBL chr1
匹配结构: ' /pattern/{script} '
(base) Mar23 17:08:36 ~/Data
$ cat example.gtf | awk '/UTR/{print $0}' | less -S
扩展结构: 'BEGIN{script} {script} END{script}'
匹配之前先打印"find UTR feature",匹配完再打印"end"
(base) Mar23 17:32:40 ~/Data
$ pwd
/trainee2/Mar23/Data
(base) Mar23 17:32:41 ~/Data
$ ls
bashrc_bk
catfile
elcome to Biotrainee()
example.fa
example.fq
example.gtf
file1
file2
Homo_sapiens.GRCh38.102.chromosome.Y.gff3
Miniconda3-latest-Linux-x86_64.sh
readme.txt
(base) Mar23 17:32:43 ~/Data
$ less -S example.gtf | awk 'BEGIN{print "find UTR feature"}/UTR/{print $0} END{print "end"}' | less -S
awk 在读取一行文本时,会用预定义的字段分隔符划分每个数据字段,并分配给一个变量。
1 代表文本行中的第1个数据字段;
……
$NF 代表文本行中的最后一个数据字段
awk 默认的字段分隔符是任意空白字符(如:空格or 制表符),也可以用-F 参数自定义分隔符
awk 内置变量:
- FS :定义输入字段分隔符,Field Separator,同–F
- RS :定义输入记录分隔符,Record Separator
- OFS :定义输出字段分隔符,Out Field Separator
- ORS :定义输出记录分隔符,Out Record Separator
$ cat example.gtf | awk 'BEGIN{OFS="\t";ORS="\t"}{print $1,$2.$3}' | head -2
chr1 ENSEMBLUTR chr1 ENSEMBLexon chr1 ENSEMBLtranscript chr1 HAVANAgene chr1 HAVANAexon chr1 HAVANAtranscript chr1 HAVANAexon chr1 HAVANAexon chr1 ENSEMBLUTR chr1 ENSEMBLexon chr1 HAVANAexon chr1 HAVANAexon chr1 ENSEMBLUTR chr1 ENSEMBLexon chr1 HAVANAexon chr1 ENSEMBLstart_codon chr1 ENSEMBLCDS chr1 ENSEMBLUTR chr1 ENSEMBLUTR chr1 ENSEMBLexon chr1 ENSEMBLexon chr1 ENSEMBLtranscript chr1 ENSEMBLtranscript chr1 HAVANAgene chr1 ENSEMBLstop_codon chr1 ENSEMBLUTR chr1 HAVANAexon chr1 HAVANAtranscript chr1 ENSEMBLstop_codon chr1 ENSEMBLCDS chr1 ENSEMBLCDS chr1 ENSEMBLUTR chr1 ENSEMBLexon chr1 ENSEMBLexon chr1 HAVANAexon chr1 ENSEMBLCDS chr1 ENSEMBLexon chr1 ENSEMBLUTR chr1 ENSEMBLexon chr1 HAVANAexon chr1 ENSEMBLCDS chr1 ENSEMBLexon chr1 ENSEMBLCDS chr1 ENSEMBLUTR chr1 ENSEMBLexon chr1 ENSEMBLexon chr1 HAVANAexon chr1 ENSEMBLCDS chr1 ENSEMBLexon chr1 ENSEMBLUTR chr1 ENSEMBLexon chr1 HAVANAexon chr1 ENSEMBLUTR chr1 ENSEMBLCDS chr1 ENSEMBLexon chr1 ENSEMBLexon chr1 HAVANAexon chr1 ENSEMBLstop_codon chr1 ENSEMBLCDS chr1 ENSEMBLUTR chr1 ENSEMBLstop_codon chr1 ENSEMBLexon chr1 ENSEMBLtranscript chr1 ENSEMBLCDS chr1 ENSEMBLCDS chr1 ENSEMBLexon chr1 ENSEMBLCDS chr1 ENSEMBLexon chr1 HAVANAexon chr1 ENSEMBLCDS chr1 ENSEMBLCDS chr1 ENSEMBLCDS chr1 ENSEMBLexon chr1 ENSEMBLexon chr1 ENSEMBLexon chr1 HAVANAexon chr1 ENSEMBLCDS chr1 ENSEMBLCDS chr1 ENSEMBLexon chr1 ENSEMBLexon chr1 HAVANAexon chr1 ENSEMBLUTR chr1 ENSEMBLCDS chr1 ENSEMBLexon chr1 ENSEMBLstart_codon chr1 ENSEMBLUTR chr1 ENSEMBLCDS chr1 ENSEMBLUTR chr1 ENSEMBLUTR chr1 ENSEMBLexon chr1 ENSEMBLexon chr1 ENSEMBLexon chr1 HAVANAexon chr1 ENSEMBLstart_codon chr1 ENSEMBLUTR chr1 ENSEMBLUTR chr1 ENSEMBLexon chr1 ENSEMBLUTR chr1 ENSEMBLUTR chr1 ENSEMBLexon chr1 ENSEMBLexon chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAtranscript chr1 HAVANAgene chr1 HAVANAexon chr1 HAVANAtranscript chr1 ENSEMBLexon chr1 ENSEMBLgene chr1 ENSEMBLtranscript chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAUTR chr1 HAVANAexon chr1 HAVANAgene chr1 HAVANAtranscript chr1 HAVANAstop_codon chr1 HAVANACDS chr1 HAVANAexon chr1 HAVANAtranscript chr1 HAVANACDS chr1 HAVANAexon chr1 HAVANACDS chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAstart_codon chr1 HAVANAUTR chr1 ENSEMBLCDS chr1 ENSEMBLexon chr1 ENSEMBLgene chr1 ENSEMBLtranscript chr1 ENSEMBLCDS chr1 ENSEMBLexon chr1 ENSEMBLUTR chr1 ENSEMBLstop_codon chr1 HAVANAexon chr1 HAVANAgene chr1 HAVANAtranscript chr1 HAVANAUTR chr1 HAVANAexon chr1 HAVANAgene chr1 HAVANAtranscript chr1 HAVANAstart_codon chr1 HAVANACDS chr1 HAVANAstop_codon chr1 HAVANAUTR chr1 HAVANAexon chr1 HAVANAtranscript chr1 HAVANAgene chr1 HAVANAexon chr1 HAVANAgene chr1 HAVANAtranscript chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAtranscript chr1 HAVANAexon chr1 HAVANAtranscript chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAtranscript chr1 HAVANAexon chr1 HAVANAgene chr1 HAVANAtranscript chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAtranscript chr1 HAVANAgene chr1 ENSEMBLUTR chr1 ENSEMBLstop_codon chr1 ENSEMBLexon chr1 ENSEMBLtranscript chr1 ENSEMBLCDS chr1 HAVANAexon chr1 ENSEMBLCDS chr1 ENSEMBLexon chr1 ENSEMBLstart_codon chr1 HAVANAexon chr1 HAVANAgene chr1 HAVANAtranscript chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAgene chr1 HAVANAtranscript chr1 HAVANAexon chr1 HAVANAtranscript chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAexon chr1 ENSEMBLexon chr1 ENSEMBLgene chr1 ENSEMBLtranscript chr1 ENSEMBLexon chr1 ENSEMBLgene chr1 ENSEMBLtranscript chr1 HAVANAexon chr1 HAVANAgene chr1 HAVANAtranscript chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAgene chr1 HAVANAtranscript chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAtranscript chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAexon chr1 HAVANAexon chr2 HAVANAUTR chr2 HAVANAexon chr2 HAVANAtranscript chr2 HAVANAgene chr2 HAVANAexon chr2 HAVANAtranscript chr2 HAVANAexon chr2 HAVANAtranscript chr2 HAVANAstop_codon chr2 HAVANACDS chr2 HAVANAexon chr2 HAVANACDS chr2 HAVANAexon chr2 HAVANAstart_codon chr2 HAVANAexon chr2 HAVANAexon chr2 HAVANAgene chr2 HAVANAtranscript chr2 HAVANAexon
- NF :数据文件中的字段总数,可以简单理解为列数
- NR :已处理的输入记录数,可以简单理解为行数
- 也可以通过-v 参数自定义变量或传递外部变量
awk 条件和循环语句:
if:条件判断
awk ' { if (判断条件) {yes} else {no} } '
$ less -S example.gtf | awk '{if($3=="gene") {print $0} else{print $3 "is not gene"}}' | less -S
$ less -S example.gtf | awk '{if($3=="gene")print $0}' | less -S
for:循环语句
awk ' { for (循环条件) {循环语句} } '
(base) Mar23 17:55:33 ~/Data
$ less -S example.gtf | awk '{for(i=1;i<4;i++){print $i}}' | less -S
三个为单位进行输出
$ less -S example.gtf | awk '{for(i=1;i<4;i++){print $i}}' | paste - - -
(base) Mar23 18:03:41 ~/Data
$ less -S example.gtf | awk '/exon/{print $5-$4}' | less -SN
$ cat example.gtf | awk 'BEGIN{OFS="\t"}{print $1,$2.$3}' | head
chr1 ENSEMBLUTR
chr1 ENSEMBLexon
chr1 ENSEMBLtranscript
chr1 HAVANAgene
chr1 HAVANAexon
chr1 HAVANAtranscript
chr1 HAVANAexon
chr1 HAVANAexon
chr1 ENSEMBLUTR
chr1 ENSEMBLexon
$ cat example.gtf | awk 'BEGIN{OFS="\t"}{print $1,$2.$3}' | head | cat -A
chr1^IENSEMBLUTR$
chr1^IENSEMBLexon$
chr1^IENSEMBLtranscript$
chr1^IHAVANAgene$
chr1^IHAVANAexon$
chr1^IHAVANAtranscript$
chr1^IHAVANAexon$
chr1^IHAVANAexon$
chr1^IENSEMBLUTR$
chr1^IENSEMBLexon$
(base) Mar23 18:15:44 ~/Data
$ cat example.gtf | awk 'BEGIN{OFS="???"}{print $1,$2.$3}' | head | cat -A
chr1???ENSEMBLUTR$
chr1???ENSEMBLexon$
chr1???ENSEMBLtranscript$
chr1???HAVANAgene$
chr1???HAVANAexon$
chr1???HAVANAtranscript$
chr1???HAVANAexon$
chr1???HAVANAexon$
chr1???ENSEMBLUTR$
chr1???ENSEMBLexon$
注意:一列不能打印分隔符
linux大小写转换:https://blog.51cto.com/wangxiaoyu/197623
3:
$ head example.gtf | awk '{print $10,$12,$14}' | sed -e 's/;//g' -e 's/"//' | less -SN
or
$ head example.gtf | awk '{print $10,$12,$14}' | tr -d '"'