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

30.《Bioinformatics Data Skills》之

作者: DataScience | 来源:发表于2021-06-25 16:40 被阅读0次

    你一定遇到过打开文件是乱码的情况,98%的时间里编码对我们来说并不重要,但是总有2%的时候由于编码问题导致了错误,不可见的特殊字符造成的错误更是令人抓狂。这里我们介绍通过三个命令(file, hexdump, grep)用来检查文本的编码方式与定位特殊字符的位置。

    检查文本的编码类型

    file命令可以检查文件的编码类型,我们使用生物信息的纯文本一般是由ASCII编码的:

    $ file Mus_musculus.GRCm38.75_chr1.bed Mus_musculus.GRCm38.75_chr1.gtf
    Mus_musculus.GRCm38.75_chr1.bed: ASCII text
    Mus_musculus.GRCm38.75_chr1.gtf: ASCII text, with very long lines
    

    UTF-8也是一个非常常用的编码格式,它是包括了ASCII与非ASCII编码的一个超集,去掉非ASCII字符后文本就是ASCII编码了。

    $ cat utf8.txt
    This file is encoded using UTF-8. This allows the use of an extended character
    set, including characters like π and ¼.
    
    $ file utf8.txt
    utf8.txt: UTF-8 Unicode text
    

    查看特殊字符位置

    文件improper.fa(如下)咋一看来是正常的fa文件:

    $ cat improper.fa
    >good-sequence
    AGCTAGCTACTAGCAGCTACTACGAGCATCTACGGCGCGATCTACG
    >bad-sequence
    GATCAGGCGACATCGAGCTATCACTACGAGCGAGΑGATCAGCTATT
    

    但是其文件类型是utf-8,说明文本内存在特殊字符:

    $ file improper.fa
    improper.fa: UTF-8 Unicode text
    

    我们该如何定位特殊字符的具体位置呢?下面介绍两种方式分别是Hexdumpgrep

    Hexdump

    这个命令会给出所有字符的16进制编码,添加-c参数还会打印出所有的字符:

    $ hexdump -c improper.fa
    0000000   >   g   o   o   d   -   s   e   q   u   e   n   c   e  \n   A
    0000010   G   C   T   A   G   C   T   A   C   T   A   G   C   A   G   C
    0000020   T   A   C   T   A   C   G   A   G   C   A   T   C   T   A   C
    0000030   G   G   C   G   C   G   A   T   C   T   A   C   G  \n   >   b
    0000040   a   d   -   s   e   q   u   e   n   c   e  \n   G   A   T   C
    0000050   A   G   G   C   G   A   C   A   T   C   G   A   G   C   T   A
    0000060   T   C   A   C   T   A   C   G   A   G   C   G   A   G    221
    0000070   G   A   T   C   A   G   C   T   A   T   T  \n
    000007c
    

    看出字符221是一个特殊字符(其显示方式类似于字母A)。

    grep

    除了使用hexdump外,grep命令也可以用来寻找特殊的字符,以下命令会搜索16进制外的字符(这里参数-n会在返回结果中给出行数):

    $ LC_CTYPE=C grep --color='auto' -n -P "[\x80-\xFF]" improper.fa
    4:GATCAGGCGACATCGAGCTATCACTACGAGCGAGGATCAGCTATT
    

    由于这行代码的用途非常特殊,我们没有必要深入地探究它的原理。可以将下面的别名存入~/.bashrc文件,在需要的时候调用。

    alias nonascii="LC_CTYPE=C grep --color='auto' -n -P '[\x80-\xFF]'"
    

    相关文章

      网友评论

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

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