标签归档:Linux

Axel – Linux下多线程下载工具

在linux环境下,用wget下载大文件,实在是件痛苦的事情,下载速度慢。这非常的不科学,于是找到了axel这个工具,可以实现在linux下多线程下载。并且可以实现断点续传。

Axel项目网站 https://wilmer.gaa.st/main.php/axel.html

安装

wget -c https://wilmer.gaa.st/downloads/axel-1.0b.tar.gz
tar zxvf axel-1.0b.tar.gz
cd axel-1.0b/
./configure
make
make instal

或者

apt-get install axel

参数
-n 指定线程数
-o 指定另存为目录
-s 指定每秒的最大比特数
-q 静默模式

测试

比如从UCSC上下载 938M 的参考基因组序列gz格式文件

axel -n 8 http://hgdownload.cse.ucsc.edu/goldenPath/hg38/bigZips/hg38.fa.gz

Initializing download: http://hgdownload.cse.ucsc.edu/goldenPath/hg38/bigZips/hg38.fa.gz
File size: 983659424 bytes
Opening output file hg38.fa.gz
Starting download

[  0%]  .......... .......... ..........  [  41.3KB/s]
[  0%]  .......... .......... ..........  [ 179.5KB/s]
[  0%]  .......... .......... ..........  [ 423.4KB/s]
[  0%]  .......... .......... ..........  [ 583.9KB/s]
[  0%]  .......... .......... ..........  [ 772.0KB/s]
[  0%]  .......... .......... ..........  [ 801.8KB/s]
[  0%]  .......... .......... ..........  [ 802.1KB/s]
[  0%]  .......... .......... ..........  [ 813.1KB/s]
[  1%]  .......... .......... ..........  [ 843.5KB/s]
[ 99%]  .......... .......... ..........  [ 666.7KB/s]
[ 99%]  .......... ......
Connection 7 finished
        ,,,,,,,,,, ,,,,,,,,,, ,,,,,,....  [ 666.6KB/s]
[ 99%]  .......... .......... ..........  [ 666.7KB/s]
[ 99%]  .......... .......
Connection 2 finished
        ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,...  [ 666.5KB/s]
[ 99%]  .......... .......... ..........  [ 663.1KB/s]
[ 99%]  .......... .......... ..........  [ 662.8KB/s]
[100%]  ....
Connection 0 finished

Downloaded 938.1 megabytes in 24:09 seconds. (662.81 KB/s)

当awk碰到百分号%数值时

awk可以通过$1,$2等,对数据进行逻辑判断或处理,比如

> echo -e "1t2n3t4" | awk '{if($1==1){print $0}}'
1       2

但如果碰到带有百分号%的数据时,则不能直接通过加减乘除进行计算或者判断

> echo -e "1%t2%n3%t4%" | awk '{if($1==0.01){print $0}}'
>

因为系统没有将1%转成数值0.01,无法进行判断$1是否等于0.01

但是可以进行大小比较

> echo -e "1%t2%n3%t4%" | awk '{if($1>0.5){print $0}}'
1%      2%
3%      4%

但此时,两行数据都输出了,表示系统认为$1大于0.5

如果与1.00001进行大小判断,则第一行不被输出,与0.0009比较则第一行输出,所以个人感觉,当awk碰到带有百分号的数据时,如果进行大小判断,则不考虑百分号%,看下例,awk把1%当作了1

> echo -e "1%t2%n3%t4%" | awk '{if($1>0.0009){print $0}}'
1%      2%
3%      4%
> echo -e "1%t2%n3%t4%" | awk '{if($1>1.0001){print $0}}'
3%      4%
> echo -e "1%t2%n3%t4%" | awk '{if($1=$1+0){print $0}}'   
1 2%
3 4%

所以,如果在处理数据时,碰到百分号进行数据处理时,一定要小心
有一种方法就是,将$1转成数值类型,即将$1加0即可,但不要赋值给$1。
下例打印第一列为%1的行,先将$1加0,转换为数值,转换过程中awk不考虑百分号%,故和1进行比较

> echo -e "1%t2%n3%t4%" | awk '{if($1+0==1){print $0}}'   
1%      2%

#####################################################################
#版权所有 转载请告知 版权归作者所有 如有侵权 一经发现 必将追究其法律责任
#Author: Jason
####################################################################

多线程gzip压缩神器—pigz

Fastq文件为纯文本文件,占用的硬盘空间较大,所以一般都会将Fastq文件压缩成gz格式,很多软件也支持fastq的gz格式输入。我用过python读取gzip,非常方便。单纯的通过gzip的命令压缩fastq,效率非常非常慢,据说是没有利用整个机器的cpu。

于是我就找到了pigz这款神器,可以在压缩数据时,发挥多核多处理器的优势,简而言之就是利用多线程进行gzip任务,比单纯的gzip压缩要快很多,有人测试快了5倍多(因为gzip压缩100G的文件时间是太长了,我也就没有测试)。

pigz

官网 http://www.zlib.net/pigz/

pigz, which stands for parallel implementation of gzip, is a fully functional replacement for gzip that exploits multiple processors and multiple cores to the hilt when compressing data.

安装pigz

wget http://zlib.net/pigz/pigz-2.3.3.tar.gz
tar -xvzf pigz-2.3.3.tar.gz
#如果提示不是gz格式,请尝试  tar -xvf pigz-2.3.3.tar.gz
cd pigz-2.3.3.tar.gz
make
如果报错 pigz.c:(.text.startup+0xca): undefined reference to `deflateEnd' gcc
请在第八行$(CC) $(LDFLAGS) -o pigz $^ -lpthread -lm 后面添加-lz选项,表示link libz

运行pigz

pigz -h 可以看到它的command option。

运行pigz和简单,和gzip的命令差不多,比如

# -c 表示打印到标准输出std,如果没有-c选项,则会生成一个后缀为gz的压缩文件。
pigz -c file > file.gz
# -k 表示压缩后不删除源文件
pigz -k file

继续阅读

利用ionice命令设置程序的IO调度与优先级

我合并多个文件,用cat将流重定向到一个文件,或者把一个大文件rm掉腾出空间,要进行IO,但如果这个时候服务器有进程进行IO时,同个进程同时进行IO,效率就会很慢。有时候我想把别的进程IO缓一缓,先把合并或者rm的任务有限解决掉,再继续别的进程的IO。

就google了下如何提高效率,查ionice这个命令。

ionice – 获取或设置程序的IO调度与优先级,通过设置命令或进程的IO调度优先级,加快IO效率

命令格式

跟命令时,设置命令的IO调度优先级,跟PID时,设置相应进程的IPD调度优先级。

ionice [[-c class] [-n classdata] [-t]] -p PID [PID]…
ionice [-c class] [-n classdata] [-t] COMMAND [ARG]… 

我也进行了测试,比如在有其进程进行IO工作时,我要在删除Fastq文件(R1文件20G,R2文件21G)时,用法详见下文。

time rm R1.fastq
real    0m37.306s
user    0m0.001s
sys     0m0.300s

time ionice -c 2 -n 0 rm R2.fastq
real    0m2.579s
user    0m0.002s
sys     0m0.682s

可以看到当提高IO的优先级后,效率还是非常快的,当然这暂时牺牲了其他进程的IO。

ionice -h用法

继续阅读

wget命令小结

下载文件夹
$ wget -c -r -nd -np -k -L -p -A c,h www.xxx.org/pub/path/

-c 断点续传
-r 递归下载,下载指定网页某一目录下(包括子目录)的所有文件
-nd 递归下载时不创建一层一层的目录,把所有的文件下载到当前目录
-np 递归下载时不搜索上层目录,如wget -c -r www.xxx.org/pub/path/
没有加参数-np,就会同时下载path的上一级目录pub下的其它文件
-k 将绝对链接转为相对链接,下载整个站点后脱机浏览网页,最好加上这个参数
-L 递归时不进入其它主机,如wget -c -r www.xxx.org/ 如果网站内有一个这样的链接:
www.yyy.org,不加参数-L,就会像大火烧山一样,会递归下载www.yyy.org网站
-p 下载网页所需的所有文件,如图片等
-A 指定要下载的文件样式列表,多个样式用逗号分隔
继续阅读