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 键运行命令,也可以按 → 右方向键得到这条命令以便进一步修改。