2021-03-18 Linux进阶-from Biotrainee

vim编辑器

Vim 编辑器:大多数Linux都会自带的文本编辑器。

功能强大:代码补全、编译及错误跳转等方便编程的功能特别
丰富,在程序员中被广泛使用。
功能强大到其官方现在对自己的定位是“程序开发工具”

Vim 编辑器:三种模式

image.png

命令模式

  • 方向键或者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行

image.png

https://support.illumina.com/bulletins/2016/04/fastq-filesexplained.
html
想了解更多可以查看

gff

gff格式记录序列中转录起始位点、基因、外显子、内含子等组成元件在染色体中的位置信息

  1. 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
    [] 匹配任意一个
    [^] 排除字符
    | 或者


    image.png

    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 行到最后一行, 表示最后
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 在读取一行文本时,会用预定义的字段分隔符划分每个数据字段,并分配给一个变量。
0 代表整个文本行;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
image.png
$ less -S example.gtf | awk '{if($3=="gene")print $0}' | less -S
image.png

for:循环语句

awk ' { for (循环条件) {循环语句} } '

(base) Mar23 17:55:33 ~/Data
$ less -S example.gtf | awk '{for(i=1;i<4;i++){print $i}}' | less -S

三个为单位进行输出


image.png
$ less -S example.gtf | awk '{for(i=1;i<4;i++){print $i}}' | paste - - -
image.png
(base) Mar23 18:03:41 ~/Data
$ less -S example.gtf | awk '/exon/{print $5-$4}' | less -SN
image.png
$ 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

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 '"'
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,131评论 2 34
  • 此篇文章内容是我很久以前在印象笔记中的一个知识总结,大概122个Linux指令。如今,写出来就当再回顾一遍了。若有...
    StephenZhang01阅读 1,042评论 0 5
  • Linux课程整理 1、学习资料 马哥linux视频,Linux 命令行与Shell脚本编程大全 2、系统认知 看...
    董高超_85d0阅读 2,185评论 2 24
  • 搬运 一、主要内容 shell编程 sed命令 awk命令 crontab定时器 二、简介 Shell是用户与内核...
    帅可儿妞阅读 438评论 0 1
  • 1、ls 文件属性:-:普通文件 d:目录文件 b:块设备 c:字符设备文件 l:符号连接...
    看清了也就看轻了彡阅读 2,002评论 0 2