cmd find 命令 多个 或者 关系 +windows_使用 rush 进行命令并行处理

705fe0b0b71cd1b0204093f5ae06fda8.png

rush 是一个类似于 GNU-parallel 的工具,提供了并行化命令的处理方案。 官方地址是:https://github.com/shenwei356/rush,该工具由人称爪哥的生信同行用 Golang 编写而成(强!)。 他开发的其他几个工具也比较有名,如 seqkit、csvtk。感兴趣的朋友可以访问他的博客。

rush 提供的功能特性非常多,作为技术介绍文,这里我只会简单介绍它的基础核心功能。其他功能读者可以通过 GitHub 官网阅读和学习。

下载和安装

  • Linux - http://app.shenwei.me/data/rush/rush_linux_amd64.tar.gz
  • MacOS - http://app.shenwei.me/data/rush/rush_darwin_amd64.tar.gz
  • Windows - http://app.shenwei.me/data/rush/rush_windows_amd64.exe.tar.gz 然后拷贝 rush.exe 到 C:WINDOWSsystem32
  • Golang - go get -u github.com/shenwei356/rush/

对于 Linux 和 MacOS,下载后记得将文件放到 PATH 变量支持的目录下或者添加新的 PATH 路径。

简单使用

简单运行

$ seq 1 3 | rush echo {}
1
2
3

使用 -k 保证输出顺序不变,对比下下面两个结果:

seq 1 10 | rush echo {}
8
1
2
4
7
3
6
5
10
9
                                                                                                         
$ seq 1 10 | rush -k echo {}
1
2
3
4
5
6
7
8
9
10

要并行的命令是可以包裹在引号中的,即 seq 1 10 | rush -k "echo {}"

通过 -i 从文件中读取数据

$ seq 1 3 > data1.txt
$ seq 4 6 > data2.txt
$ rush echo {} -i data1.txt -i data2.txt
4
6
3
1
2
5

这里比较强大在于 -i 可以多次使用。

-r 设定重试次数

这个在处理一些涉及联网的操作时应该相当有用。

seq 1 | rush 'python unexisted_script.py' -r 1
python: can't open file 'unexisted_script.py': [Errno 2] No such file or directory
[WARN] wait cmd #1: python unexisted_script.py: exit status 2
python: can't open file 'unexisted_script.py': [Errno 2] No such file or directory
[ERRO] wait cmd #1: python unexisted_script.py: exit status 2

一些有用的占位符

  • 目录名 {/}
  • 文件名 {%}
  • 移除后缀 {^suffix}
$ echo dir/file_1.txt.gz | rush 'echo {/} {%} {^_1.txt.gz}'
dir file_1.txt.gz dir/file
  • 移除文件名最后的拓展名 {%.}
  • 移除文件名所有拓展名 {%:}
$ echo dir.d/file.txt.gz | rush 'echo {%.} {%:}'        
file.txt file

分别使用 {.}{:} 会保留目录:

$ echo dir.d/file.txt.gz | rush 'echo {.} {:}'  
dir.d/file.txt dir.d/file
  • job id {#}
  • 域索引 {N}
echo 12 file.txt dir/s_1.fq.gz | rush 'echo job {#}: {2} {2.} {3%:^_1}'
job 1: file.txt file s
  • 使用正则表达式提取子串 {@regexp}
$ echo read_1.fq.gz | rush 'echo {@(.+)_d}'
read

-d 自定义域分隔符

$ echo a=b=c | rush 'echo {1} {2} {3}' -d =
a b c

-D 自定义记录分隔符

$ echo a b c d | rush -D " " -k 'echo {}'
a
b
c
d
记录理解为数据的行, 理解为数据的列。

-n 传递多行数据到命令

seq 5 | rush -n 2 -k 'echo "{}"; echo'
1
2

3
4

5

-t 设定超时

这个功能我自己认为用处不是很大,但对于处理那种长时间生信数据处理来说有时候可能会有发挥的地方。

$ time seq 1 | rush 'sleep 2; echo {}' -t 1
[ERRO] run cmd #1: sleep 2; echo 1: time out
seq 1  0.00s user 0.00s system 66% cpu 0.005 total
rush 'sleep 2; echo {}' -t 1  0.01s user 0.01s system 2% cpu 1.022 total
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值