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

10.《Bioinformatics Data Skills》之

作者: DataScience | 来源:发表于2021-05-29 15:47 被阅读0次

    Unix Pipe作为Unix模块化的核心,兼具速度与美学。它与输出流重定向的区别在于,输出流重定向是将程序的输出内容保存在文件,而管道的作用是将一个程序的输出作为另一个程序的输入(标准错误还是会打印在屏幕上,fig.1)。

    Figure 1 管道原理示意图

    内存读写的速度远高于磁盘读写,所以程序运行速度的瓶颈通常会来源于文件的读写。使用管道可以提高运行速度,节约磁盘空间。

    管道示例

    以一个简单的例子来说明,这里有一个FASTQ文件(如下图)

    cat tb1.fasta
    >gi|385663969|gb|JQ900508.1| Zea mays subsp. mexicana isolate IS9 teosinte branched 1 (tb1) gene, complete cds
    GCCAGGACCTAGAGAGGGGAGCGTGGAGAGGGCATCAGGGGGCCTTGGAGTCCCATCAGTAAAGCACATG
    TTTCCTTTCTGTGATTCCTCAAGCCCCATGGACTTACCGCTTTACCAACAACTGCAGCTAAGCCCGTCTT
    CCCCAAAGACGGACCAATCCAGCAGCTTCTACTGCTAYCCATGCTCCCCTCCCTTCGCCGCCGCCGACGC
    CAGCTTTCCCCTCAGCTACCAGATCGGTAGTGCCGCGGCCGCCGACGCCACCCCTCCACAAGCCGTGATC
    AACTCGCCGGACCTGCCGGTGCAGGCGCTGATGGACCACGCGCCGGCGCCGGCTACGGCTACAGAGCTGG
    GCGCCTGCGCCAGTGGTGCAGAAGGATCCGGCGCCAGCCTCGACAGGGCGGCTGCCGCGGCGAGGAAAGA
    CCGGCACAGCAAGATATGCACCGCCGGCGGGATGAGGGACCGCCGGATGCGGCTCTCCCTTGACGTCGCG
    CGCAAATTCTTCGCGCTGCAGGACATGCTTGGCTTCGACAAGGCAAGCAAGACGGTACAGTGGCTCCTCA
    ACACGTCCAAGTCCGCCATCCAGGAGATCATGGCCGACGACGCGTCTTCGGAGTGCGTGGAGGACGGCTC
    CAGCAGCCTCTCCGTCGACGGCAAGCACAACCCGGCAGAGCAGCTGGGAGGAGGAGGAGATCAGAAGCCC
    AAGGGTAATTGCCGCGGCGAGGGGAAGAAGCCGGCCAAGGCAAGTAAGGCGGCGGCCACCCCGAAGCCGC
    CAAGAAAATCGGCCAATAACGCACACCAGGTCCCCGACAAGGAGACGAGGGCGAAAGCGAGGGAGAGGGC
    GAGGGAGCGGACCAAGGAGAAGCACCGGATGCGCTGGGTAAAGCTTGCTTCAGCAATTGACGTGGAGGCG
    GCGGCTGCCTCGGGGCCGAGCGACAGGCCGAGCTCGAACAATTTGAGCCACCACTCATCGTTGTCCATGA
    ACATGCCGTGTGCTGCCGCTGAATTGGAGGAGAGGGAGAGGTGTTCATCAGCTCTCAGCAATAGATCAGC
    AGGTAGGATGCAAGAAATCACAGGGGCGAGCGACGTGGTCCTGGGCTTTGGCAACGGAGGAGGAGGATAC
    GGCGACGGCGGCGGCAACTACTACTGCCAAGAGCAATGGGAACTCGGTGGAGTCGTCTTTCAGCAGAACT
    CACGCTTCTACTGAACACTACGGGCGCACTAGGTACTAGAACTACTCTTTCGACTTACATCTATCTCCTT
    TCCCTCAACGTGAGCTTCTCAATAATTTGCTGTCTTAATCTATGCGTGTGTTTCTCTTTCTAGACTTCGT
    AATTGGCTGTGTGACGATGAACTAAGTTTGGTCATCGCATGATGATGTATTATAGCTAGCTAGCATGCAC
    TGTGGCGTTGATTCAATAATGGAATTAATCGGTGTCGTCGATTTGGTGATTTCCGAACTGAATCTCTGTG
    ATGAACGAGATCAAACAGTATCCGCCGGTGACGGACGTTCATTACTATTGGCAAGCAAAGCAAGTACTAA
    TGTAATTCAGCTGTTTGATGACAGAATGAAAAAAATGTTGAAGGCTGAAGCTATAACATGCTGAAAGAGA
    GGCTTTTGCTAGGTAAAAGTCTAGCTCACAAGGTCAATTCCATGATGCCGTTTGTATGCATGTTAAAATC
    TGCACCTAATGGCGCGGCTTTATATAGTCTTATAATTCATGGATCAAACATGCCGATC
    

    我们可以通过以下命令来搜索非碱基的字母:

    grep -v "^>" tb1.fasta | \
    grep --color -i "[^ACTG]"
    # CCCCAAAGACGGACCAATCCAGCAGCTTCTACTGCTAYCCATGCTCCCCTCCCTTCGCCGCCGCCGACGC
    

    注:

    1. 我们找到的一行包含字母“Y”,它也是一个IUPAC标准字符代表C或者T。
    2. grep作为常用的文本匹配命令。引号里面是待匹配的正则表达式(加引号是一个好习惯,否则>会被程序理解为重定向);
    3. 第一行中:^>代表以">"开头的行,-v表示反向匹配,意思是在tbl.fasta里面寻找非">"开头的文本;
    4. \只是为了换行,来提高可读性
    5. 第二行中:--color对匹配结果加颜色,更醒目,-i代表不区分大小写(ignore case),[^ACTC]^是取非的意思,意思是不区分大小写地匹配包含非ACTG字符的行。

    结合管道与重定向

    1. 有时候我们需要将程序的标准错误信息存储为log文件,可以结合管道与重定向:
      program1 inputfile 2> program1.err | program2 2> program2.err > result.txt
    2. 如果我们想结合标准输出和标准出错来查找某一信息(例如错误),可以将标准出错重定向到标准输出:
      program inputfile 2>&1 | grep "error"
      如果想将标准出错信息同时重定向到文件中可以采用下面的方式(见解释):
      program inputfile > result.txt 2>&1

    使用tee命令在管道中重定向

    有时候我们采用管道来连接不同的程序,但是出于程序调试或者存储重要结果等不同的目的我们同时也想要保存中间结果。我们可以中管道中追加tee命令来达到目的:
    program1 inputfile | tee intermediatefile.txt | program2 > result.txt

    相关文章

      网友评论

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

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