美文网首页生物信息数据科学
36.《Bioinformatics Data Skills》之

36.《Bioinformatics Data Skills》之

作者: DataScience | 来源:发表于2021-07-02 21:00 被阅读0次

Unix命令和管道符号由于不在磁盘上进行读写操作,极大地提高的速度。今天介绍一个新命令sed,它最流行的使用场景是进行文本的替换,方便快速。

例如将chroms.txt文本(如下)出现的染色体名字chrom替换为chr:

$ cat chroms.txt
chrom1  3214482 3216968
chrom1  3216025 3216968
chrom1  3216022 3216024
chrom1  3671349 3671498
chrom1  3214482 3216021
chrom1  3466587 3513553
chrom1  3466587 3513553
chrom1  3466587 3466687
chrom1  3513405 3513553
chrom1  3783876 3783933
$ sed 's/chrom/chr/' chroms.txt
chr1    3214482 3216968
chr1    3216025 3216968
chr1    3216022 3216024
chr1    3671349 3671498
chr1    3214482 3216021
chr1    3466587 3513553
chr1    3466587 3513553
chr1    3466587 3466687
chr1    3513405 3513553
chr1    3783876 3783933

sed文本替换采用正则表达式,形式为s/match/replace/。默认每行替换第一次出现的匹配,如果想要全局替换的话在末尾加g(即s/match/replace/g),忽略大小写的话加i。默认使用基础正则表达式,通过参数-E使用扩展的正则表达式:

$ echo "chr1:28427874-28425431" | sed -E 's/^(chr[^:]+):([0-9]+)-([0-9]+)/\1\t\2\t\3/'
chr1    28427874        28425431

sed默认的行为是输出匹配替换后的结果,但是如果没有匹配到内容的话则会输出整行内容:

$ grep -v "^#" Mus_musculus.GRCm38.75_chr1.gtf | sed -E 's/.*transcript_id "([^"]+)".*/\1/' | head -n3
1       pseudogene      gene    3054233 3054733 .       +       .       gene_id "ENSMUSG00000090025"; gene_name "Gm16088"; gene_source "havana"; gene_biotype "pseudogene";
ENSMUST00000160944
ENSMUST00000160944

通过增加-n参数,并且在正则表达式结尾添加p保证只输出匹配替换行的结果:

$ grep -v "^#" Mus_musculus.GRCm38.75_chr1.gtf | sed -E -n 's/.*transcript_id "([^"]+)".*/\1/p' | head -n3
ENSMUST00000160944
ENSMUST00000160944
ENSMUST00000082908

注意上面的命令采用了"([^"]+)"的形式保证非贪婪匹配,如果换成"(.*)"会变成贪婪匹配,导致如下后果:

$ echo 'transcript_id "ENSMUST00000160944"; gene_name "Gm16088"' | sed -E -n 's/.*transcript_id "(.*)".*/\1/p'
ENSMUST00000160944"; gene_name "Gm16088

上面的结果过度匹配了,所以匹配引号等配对出现的符号里面的内容时可以采用非贪婪匹配的形式避免出错。

sed也可以直接输出指定范围行的内容:

$ sed -n '10,15p' mm_gene_names.txt
1700019A02Rik
1700019D03Rik
1700019O17Rik
1700022P22Rik
1700025G04Rik
1700034H15Rik

总的来说,sed最常见的用法是替换文本,如果需要更加复杂的处理,与其编写复杂的sed脚本,不如通过R或者Python实现方便。

相关文章

网友评论

    本文标题:36.《Bioinformatics Data Skills》之

    本文链接:https://www.haomeiwen.com/subject/dueyultx.html