美文网首页生信小白生物信息数据科学
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