23.《Bioinformatics-Data-Skills》之
2021-06-17 本文已影响0人
DataScience
《Bioinformatics-Data-Skills》之文件压缩
人类全基因组碱基就多达2.91Gbp个,生物信息学数据分析经常需要对付大数据。在处理过程中对文件进行压缩,可以有效地节约存储与传输成本。很多生物信息学的软件也设计为可以直接读取与处理压缩文件。
GZIP的使用
Linux上最常用的压缩命令包括gzip
与bzip2
。前者速度更快而后者文件压缩率更高(可以用于文件归档)。两者的使用方式比较类似,这里只介绍在生物信息学中更常使用的gzip
。
1. gzip
可以直接压缩程序的标准输出。
假设一个程序trimmer
用于过滤文件中低质量的read,可以直接读取压缩文件并生成标准化输出结果,我们可以通过如下命令保存结果:
trimmer input.fastq.gz | gzip > output.fastq.gz
2. gzip
可以直接压缩文件。
例如:
gzip gene-1.bed
ls
# README.md gene-1.bed.gz gene-2.bed
被压缩的文件会被替换掉并且加上后缀".gz"。
可以采用gunzip
命令对文件进行解压缩:
gunzip gene-1.bed.gz
ls
# README.md gene-1.bed.gz gene-2.bed
3. gzip/gunzip
可以通过-c
参数输出到标准输出,这样可以保留原文件情况下进行文件的压缩与解压缩:
gzip -c gene-1.bed > gene-1.bed.gz
ls
# README.md gene-1.bed gene-1.bed.gz gene-2.bed
gunzip -c gene-1.bed.gz > gene-1.duplicate.gz
ls
# README.md gene-1.bed gene-1.bed.gz gene-1.duplicate.gz gene-2.bed
4. gzip
算法的一个特点是可以将不同的压缩内容组合在一起。利用这种特性我们可以将新内容压缩,追加到于已存在的压缩文件中:
gzip -c gene-2.bed >> results.bed.gz
这与先组合多个文件的内容再进行压缩的方式一致,后者可以提高一些压缩率:
cat gene-1.bed gene-2.bed | gzip > results.bed.gz
注意:以上操只作用于单一文件,压缩多个文件的话可以使用tar
命令对多个文件进行打包,这里不多介绍(使用man tar
查看使用方式)。
处理压缩文件
由于文件压缩的巨大优势,很多Unix和生物信息学软件可以直接处理压缩包。
很多Unix的基本操作都有压缩包版本,例如:grep
的压缩包版本为zgrep
,cat
有zcat
,diff
有zdiff
,less
有zless
。
如果一个程序生成的结果是已经压缩过的,那么可以使用zcat
进行直接查看。
假如我们想要查找压缩包文件内容,可以通过zgrep
命令:
zgrep --color -i -n "6206270" results.gz
# 1:1 6206197 6206270 GENE00000025907
# 8:1 6206227 6206270 GENE00000025907
# 23:1 6206197 6206270 GENE00000025907
# 30:1 6206227 6206270 GENE00000025907
压缩包版本的命令会牺牲一部分的性能(因为CPU需要先对文件进行解压缩处理),不过相对其方便性这往往是可以接受的。