Linux 下提升生物信息分析工作效率的神器(持续更新)

tags: fastq clumpify linux pigz axel Ctrl+R

子曰:“工欲善其事,必先利其器。”


多线程超快速压缩工具 pigz

pigz 是 linux 下一个高效压缩工具,与 gzip 相比 pigz 在压缩文件时默认使用多线程,如果不指定线程数,软件检测到的机器的 cpu 可用线程数就是默认线程数,如果检测不到,则默认设为 8,因此比 gzip 快,也比 gzip 更耗资源。

为什么叫 pigz,官网这么描述的:A parallel implementation of gzip for modern multi-processor, multi-core machines

压缩解压测序原始数据,VCF 文件等等,pigz 飞一般的感觉~
压缩:

pigz  raw.fastq

解压:

pigz -d raw.fastq.gz

详细用法

$ pigz
Usage: pigz [options] [files ...]
  对文件进行压缩替换,文件名添加后缀 '.gz'。如果不指定文件,则接受标准输入然后将压缩结果输出到标准输出。pigz 是多线程版的 gzip。

Options:
  -0 to -9, -11        压缩水平 (11 is much slower, a few % better)
  --fast, --best       --fast 代表压缩水平为1,--best代表压缩水平为9
  -b, --blocksize mmm  设置压缩区块大小为 mmmK (默认 128K)
  -c, --stdout         将处理结果输出到标准输出 (won't delete)
  -d, --decompress     对压缩文件进行解压缩
  -f, --force          Force overwrite, compress .gz, links, and to terminal
  -F  --first          Do iterations first, before block split for -11
  -h, --help           显示帮助文档
  -i, --independent    Compress blocks independently for damage recovery
  -I, --iterations n   Number of iterations for -11 optimization
  -k, --keep           Do not delete original file after processing
  -K, --zip            Compress to PKWare zip (.zip) single entry format
  -l, --list           List the contents of the compressed input
  -L, --license        Display the pigz license and quit
  -M, --maxsplits n    Maximum number of split blocks for -11
  -n, --no-name        Do not store or restore file name in/from header
  -N, --name           Store/restore file name and mod time in/from header
  -O  --oneblock       Do not split into smaller blocks for -11
  -p, --processes n    使用 n 线程进行压缩(默认是值是机器核心数,核心数未知则使用 8 线程) 
  -q, --quiet          静默模式,不输出任何信息
  -r, --recursive      递归模式,对所有的子文件夹中内容进行同样的处理
  -R, --rsyncable      Input-determined block locations for rsync
  -S, --suffix .sss    压缩文件后缀用 .sss 代替默认的 .gz 
  -t, --test           Test the integrity of the compressed input
  -T, --no-time        Do not store or restore mod time in/from header
  -v, --verbose        Provide more verbose output
  -V  --version        Show the version of pigz
  -z, --zlib           Compress to zlib (.zz) instead of gzip format
  --                   All arguments after "--" are treated as files

实际上没有任何理由不用 pigz 代替 gzip 了


能使 Fastq 压缩文件再缩小 30% 并加速后续分析流程的小神器 Clumpify

Clumpify 是 BBMap 工具包中的一个组件,用法如下:

clumpify.sh -Xmx50000m in1 = r1.fq.gz in2 = r2.fq.gz out1 = c1.fq.gz out2 = c2.fq.gz

它其实只是将 Fastq 文件按照序列相似性和 tile 位置进行了排序(有点类似 CD-hit 工作原理),以便使得文件压缩率达到最大,它并没有对文件内容做任何改动。它除了会使后续分析流程变快之外,没有任何副作用。

建议对于数据需要长期存储,或者后续分析流程耗时较长的场景,数据下机之后首先用这个工具对 fastq 进行排序压缩,节省数据存储空间。

实测 Clumpify 确实能显著减少 fastq 压缩文件的体积,这里注意一个参数 -Xmx 限制 JVM 使用的最大内存,一定要根据自己机器配置情况设置一下,不然 Clumpify 默认自动检测可用内存,如果处理的 Fastq 文件太大,会把机器内存都占满,就别再想跑别的程序了。

另外,Clumpify 还可以直接识别原始数据中的光学 duplicate,就是那些 @seq-id 坐标临近、序列相同的 reads,并去除它,清理数据同时节省空间 :)


多线程下载工具 axel

axel 是 linux 下支持多线程下载的工具,下载速度会比 wget 快,下载数据库,参考基因组,比 wget 强多了:

$ axel
Usage: axel [options] url1 [url2] [url...]

--max-speed=x       -s x    最大下载速度 (bytes per second)
--num-connections=x -n x    最大下载进程数
--output=f      -o f    指定输出文件名
--search[=x]    -S [x]  搜索境像并且从指定的x服务器(可以是多个)下载
--header=x      -H x    添加文件头
--user-agent=x  -U x    使用代理
--no-proxy      -N  不使用代理
--insecure      -k  不验证 SSL 证书
--quiet         -q  静默模式
--verbose       -v  显示下载详情
--alternate     -a  设置下载过程中按不刷屏方式显示下载过程
--help          -h  显示帮助信息
--version       -V  显示版本信息

Visit https://github.com/eribertomota/axel/issues to report bugs

支持断点续传,下载中断之后,再次输入上次的下载命令,会接着上次下载的位置继续下载。

对我来说没有任何理由不用 axel 代替 wget 了


Linux 快捷搜索历史命令 Ctrl + R

在日常的工作中,用到的很多 Linux 命令都可以通过修改历史命令快速编辑完成,效率比重新敲打一条命令不知道高哪里去了。使用上下方向键可以按顺序查找历史命令,但是效率不高,最高效的方法是使用 Ctrl + R 快捷键组合通过输入关键字符快速调出相关的历史命令,如果匹配这个关键字符的历史命令有多条,可以重复按 Ctrl + R 在多条命令中进行切换,切到自己想要的命令后可以直接 Enter 键运行命令,也可以按 → 右方向键得到这条命令以便进一步修改。

快捷搜索历史命令 Ctrl + R
快捷搜索历史命令 Ctrl + R

推荐阅读更多精彩内容