生物信息LInux学习5

http://mp.weixin.qq.com/s/Rw6ivF_qBPCWiiGL7lxc_g

文件内容操作(二)


文件排序


seq:产生一系列的数字;
man seq查看其具体使用。我们这使用seq产生下游分析所用到的输入文件。


#产生从1到10的数,步长为1
ct@ehbio:~$ seq 1 10
1
2
3
4
5
6
7
8
9
10
#产生从1到10的数,步长为1,用空格分割
ct@ehbio:~$ seq -s ' ' 1 10
1 2 3 4 5 6 7 8 9 10
#产生从1到10的数,步长为2
#如果有3个数,中间的数为步长,最后一个始终为最大值
ct@ehbio:~$ seq -s ' ' 1 2 10
1 3 5 7 9
#还记得前面提到的标准输入和标准输出吧
#后台回复 标准输入 查看
ct@ehbio:~$ cat <(seq 0 3 17) <(seq 36 18) >test
ct@ehbio:~$ cat test
0
3
6
9
12
15
3
9
15


sort:排序,默认按字符编码排序。如果想按数字大小排序,需添加-n参数。


#可能不符合预期的排序,系统首先排0,然后排1, 3, 6, 9
ct@ehbio:~$ sort test
0
12
15
15
3
3
6
9
9
#按数字大小排序
ct@ehbio:~$ sort -n test
0
3
3
6
9
9
12
15
15


sort -u:去除重复的行,等同于sort | uniq


ct@ehbio:~$ sort -nu test
0
3
6
9
12
15


sort file | uniq -d:获得重复的行。(d=duplication)


ct@ehbio:~$ sort -n test | uniq -d
3
9
15


sort file | uniq -c:获得每行重复的次数。


#第一列为每行出现的次数,第二列为原始的行
ct@ehbio:~$ sort -n test | uniq -c
1 0
2 3
1 6
2 9
112
215
#换一个文件看的更清楚
ct@ehbio:~$ cat <test2
> a
> b
> c
> b
> a
> e
> d
> a
> END
#第一列为每行出现的次数,第二列为原始的行
ct@ehbio:~$ sort test2 | uniq -c
3 a
2 b
1 c
1 d
1 e
#在执行uniq操作前,文件要先排序,不然结果很诡异
ct@ehbio:~$ cat test2 | uniq -c
1 a
1 b
1 c
1 b
1 a
1 e
1 d
1 a


整理下uniq -c的结果,使得原始行在前,每行的计数在后。
awk是一个强大的文本处理工具,其处理数据模式为按行处理。每次读入一行,进行操作。OFS:输出文件的列分隔符(output file column
separtor);FS为输入文件的列分隔符(默认为空白字符)。awk中的列从第1到n列,分别记录为$1, $2$nBEGIN表示在文件读取前先设置基本参数;与之相对应的是END,只文件读取完成之后进行操作。不以BEGIN, END开头的{}就是文件读取、处理的部分。


#管道符还记得吧,后台回复 管道 可查看
# awk的操作就是镀金上一步的结果,去除多余的空白,然后调换2列
ct@ehbio:~$ sort test2 | uniq -c | awk'BEGIN{OFS="\t";}{print $2, $1}'
a3
b2
c1
d1
e1


对两列文件,安照第二列进行排序, sort -k2,2n


#第二列按数值大小排序
ct@ehbio:~$ sort test2 | uniq -c | awk'BEGIN{OFS="\t";}{print $2, $1}' | sort -k2, 2n
c1
d1
e1
b2
a3
#第二列按数值大小排序
#第二列相同的再按第一列的字母顺序的逆序排序(-r)
#注意看前3行的顺序与上一步结果的差异
ct@ehbio:~$ sort test2 | uniq -c | awk'BEGIN{OFS="\t";}{print $2,$1}' | sort -k2,2n -k1,1r
e1
d1
c1
b2
a3


FASTA序列提取


生成单行序列FASTA文件,提取特定基因的序列,最简单的是使用grep命令。
grep在前面也提到过,以后还会经常提到,主要用途是匹配文件中的字符串,以此为基础,进行一系列的操作。如果会使用正则表达式,将会非常强大。正则表达式版本很多,几乎每种语言都有自己的规则,本文档不会展开,用到哪个提哪个。


#生成单行序列FASTA文件
ct@ehbio:~$ cat <test.fasta
> >SOX2
> ACGAGGGACGCATCGGACGACTGCAGGACTGTC
> >POU5F1
> ACGAGGGACGCATCGGACGACTGCAGGACTGTC
> >NANOG
> CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT
> END
ct@ehbio:~$ cat test.fasta
>SOX2
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
>POU5F1
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
>NANOG
CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT
# grep匹配含有SOX2的行
# -A 1表示输出的行中,包含匹配行的下一行(A: after)
ct@ehbio:~$ grep -A 1 'SOX2' test.fasta
>SOX2
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
#也可以使用AWK
#先判断当前行是不是>开头,如果是,表示是序列名字行,替换掉大于号,取出名字。
# sub替换, sub(被替换的部分,要替换成的,待替换字符串)
#如果不以大于号开头,则为序列行,存储起来。
# seq[name]:相当于建一个字典,name为key,序列为值。然后就可以使用name调取序列。
ct@ehbio:~$ awk'BEGIN{OFS=FS="\t"}{if($0~/>/) {name=$0; sub(">","", name);} else seq[name]=$0;}END{print ">SOX2"; printseq["SOX2"]}' test.fasta
>SOX2
ACGAGGGACGCATCGGACGACTGCAGGACTGTC


多行FASTA序列提取要麻烦些,一个办法就是转成单行序列,用上面的方式处理。
sedtr都为最常用的字符替换工具。


ct@ehbio:~$ cat <test.fasta
> >SOX2
> ACGAGGGACGCATCGGACGACTGCAGGACTGTC
> ACGAGGGACGCATCGGACGACTGCAGGACTGTC
> ACGAGGGACGCATCGGACGACTGCAGGAC
> >POU5F1
> CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT
> CGGAAGGTAGTCGTCAGTGCAGCGAGTCC
> >NANOG
> ACGAGGGACGCATCGGACGACTGCAGGACTGTC
> ACGAGGGACGCATCGGACGACTGCAGG
> ACGAGGGACGCATCGGACGACTGCAGGACTGTC
> ACGAGGGACGCATCGGACGACTGCAGGACTGT
> END
#给>号开头的行的行尾加个TAB键,以便隔开名字和序列
# TAB键不可见,直接看看不大
# \(\)表示记录匹配的内容,\1则表示()中记录的匹配的内容
#后面我们专门讲sed
ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/'test.fasta
>SOX2
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
ACGAGGGACGCATCGGACGACTGCAGGAC
>POU5F1
CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT
CGGAAGGTAGTCGTCAGTGCAGCGAGTCC
>NANOG
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
ACGAGGGACGCATCGGACGACTGCAGG
ACGAGGGACGCATCGGACGACTGCAGGACTGTC
ACGAGGGACGCATCGGACGACTGCAGGACTGT
#使用cat -A可以显示文件中所有的符号
# ^I表示tab键
# $表示行尾
ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/'test.fasta | cat -A
>SOX2^I$
ACGAGGGACGCATCGGACGACTGCAGGACTGTC$
ACGAGGGACGCATCGGACGACTGCAGGACTGTC$
ACGAGGGACGCATCGGACGACTGCAGGAC$
>POU5F1^I$
CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT$
CGGAAGGTAGTCGTCAGTGCAGCGAGTCC$
>NANOG^I$
ACGAGGGACGCATCGGACGACTGCAGGACTGTC$
ACGAGGGACGCATCGGACGACTGCAGG$
ACGAGGGACGCATCGGACGACTGCAGGACTGTC$
ACGAGGGACGCATCGGACGACTGCAGGACTGT$
#把所有的换行符替换为空格
# tr这个命令,前面提到过,若想不起来`man tr`查看
#主意第二个参数,引号内为空格。
ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/'test.fasta | tr '\n' ' '
>SOX2ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT CGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOGACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGG ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGT
#把最后一个空格替换为换行符
ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/'test.fasta | tr '\n' ' ' | sed -e 's/ $/\n/'
>SOX2ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT CGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOGACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGG ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGT
#把' >'替换为换行符 注意被替换的是 空格+大于号
#当连用多个替换命令时,使用-e隔开
ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/'test.fasta | tr '\n' ' ' | sed -e 's/ $/\n/' -e 's/ >/\n>/g'
>SOX2ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC
>POU5F1CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT CGGAAGGTAGTCGTCAGTGCAGCGAGTCC
>NANOGACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGT
#把所有的空格替换掉
ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/'test.fasta | tr '\n' ' ' | sed -e 's/ $/\n/' -e 's/ >/\n>/g' -e 's/ //g'
>SOX2ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC
>POU5F1CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGTCGGAAGGTAGTCGTCAGTGCAGCGAGTCC
>NANOGACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGT
#把TAB键转换为换行符
ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/'test.fasta | tr '\n' ' ' | sed -e 's/ $/\n/' -e 's/ >/\n>/g' -e 's/ //g'-e 's/\t/\n/g'
>SOX2
ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC
>POU5F1
CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGTCGGAAGGTAGTCGTCAGTGCAGCGAGTCC
>NANOG
ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGT


或者简单点,直接用前面的awk略微做下修改。


#差别只在一点
#对于单行fasta文件,只需要记录一行,seq[name]=$0
#对于多好fasta文件,需要把每一行序列都加到前面的序列上,seq[name]=seq[name]$0
ct@ehbio:~$ awk'BEGIN{OFS=FS="\t"}{if($0~/>/) {name=$0; sub(">","", name);} else seq[name]=seq[name]$0;}END{print">SOX2"; print seq["SOX2"]}' test.fasta
>SOX2
ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC


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

推荐阅读更多精彩内容