标签: gnu-parallel

多机床本着moreutils“并行”的精神?

parallel来自moreutils是一个很好的工具,除其他外,它可以mnCPU 上均匀分布独立的任务。有人知道可以为多台机器完成相同任务的工具吗?这样的工具当然不必了解多台机器或网络或类似的概念——我只是在谈论将m任务分配到N 集群中,集群中的i N_i任务并行运行。

今天我使用我自己的 BASH 脚本来完成同样的事情,但是一个更精简和干净的工具会很棒。有人知道吗?

cluster parallelism gnu-parallel

4
推荐指数
1
解决办法
353
查看次数

并行变量声明 sh -c ...

我一直在尝试处理findwith的输出parallel,这反过来又调用了一个shell(需要一些文本替换)。我观察到一些奇怪的行为,我无法真正向自己解释。

在每个目录中有一堆文件,将它们称为file1.xtc, file2.xtc. 其中一些具有诸如file1.part0002.xtc等名称。如果从其传递的文件find具有该*.part000x.*名称,则我需要删除该*.part000x.*位,以便生成的命令类似于

command -f file1.part0001.xtc -s file1.tpr 
Run Code Online (Sandbox Code Playgroud)

我使用findparallel达到这个效果,但是parallel的替换(特别是{.}位)还不够(他们删除了.xtc扩展名,留下了.part0001单独的),所以这是我用来检查输出的命令:

find 1st 2nd 3rd -name '*.xtc' -print0 | parallel -0 sh -c 'name=""; name="{.}"; echo {.} ${name%.*}.tpr'
Run Code Online (Sandbox Code Playgroud)

如果我使用上面的命令,首先声明name并为其分配一个空字符串(或其他任何内容),结果是

file1.part0001 file1.tpr
Run Code Online (Sandbox Code Playgroud)

根据需要(这些是我需要用于命令的名称)。但是,如果我运行这个

find 1st 2nd 3rd -name '*.xtc' -print0 | parallel -0 sh -c 'name="{.}"; echo {.} ${name%.*}.tpr'
Run Code Online (Sandbox Code Playgroud)

结果是:

file1.part0001 .tpr
Run Code Online (Sandbox Code Playgroud)

或者它表现得好像 …

bash find variable gnu-parallel

4
推荐指数
1
解决办法
1300
查看次数

为什么 parallel --nice 没有设置好?

如果我使用 运行命令nice,那么我可以看到它的进程具有预期的 niceness 值:

在一个终端中:

nice sleep 17
Run Code Online (Sandbox Code Playgroud)

在另一个:

$ ps -aoni,comm | grep sleep
 10 sleep
Run Code Online (Sandbox Code Playgroud)

但是尝试对GNU 并行(版本20161222,Debian 9.3)做同样的事情,我失败了:

parallel --nice 10 sleep ::: 17

$ ps -aoni,comm | grep sleep
  0 sleep
Run Code Online (Sandbox Code Playgroud)

我可能遗漏了一些明显的东西,但是什么?

更新:也许这只是一个错误,因为它适用于旧版本......

gnu-parallel

4
推荐指数
1
解决办法
565
查看次数

gnu 并行如何与 ffmpeg 一起使用

我有包含一些 mp4 文件的文件夹,我想从每个文件中并行提取图像并将其另存为:

文件名_编号.bmp

其中文件名是输入文件名

如何使用并行和 ffmpeg 做到这一点

command-line ffmpeg gnu-parallel

4
推荐指数
1
解决办法
1721
查看次数

数组参数的GNU并行组合?

我有一个 bash 功能:

println(){echo "$1" "$2" "$3"}
Run Code Online (Sandbox Code Playgroud)

export -f println
Run Code Online (Sandbox Code Playgroud)

我想使用 GNU parallel 来运行 println。该命令应接受以下数组的输入:

a1=(a b c) 

a2=(x y)

a3=(z1 z2)
Run Code Online (Sandbox Code Playgroud)

它应该输出以下内容:

   a x a3
   a y a3
   b x a3
   b y a3
   c x a3
   c y a3
Run Code Online (Sandbox Code Playgroud)

哪个命令可以做到这一点?我希望命令如下:

 parallel ... println ... a1 ... a2 .... a3
Run Code Online (Sandbox Code Playgroud)

谢谢!

bash gnu-parallel

4
推荐指数
1
解决办法
125
查看次数

为什么我的并行命令同时打印“Starting”和“Finished”?

ls *.txt | parallel 'echo Starting on file {}; mkdir {.}; cd {.}; longCMD3 ../{} > /dev/null; echo Finished file {}'
Run Code Online (Sandbox Code Playgroud)

这个 liner 部分工作,除了 longCMD3 需要大约 3 分钟,但第一和第二个 echo 命令几乎同时打印。我试过放入

wait
Run Code Online (Sandbox Code Playgroud)

在最后的回声之前,但这没有区别。

如何确保仅在 longCMD3 完成后才打印最终回声?

这是一个例子

假设我只有 4 个内核:

ls
foo1.txt foo2.txt foo3.txt foo4.txt foo5.txt foo6.txt 
Run Code Online (Sandbox Code Playgroud)

我的期望:

Starting on file foo1.txt
Starting on file foo2.txt
Starting on file foo3.txt
Starting on file foo4.txt
Run Code Online (Sandbox Code Playgroud)

那么 longCMD3 至少需要 2 分钟才能完成其中一个文件

Finished file foo1.txt
Starting on file foo5.txt
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

Starting on file foo1.txt …
Run Code Online (Sandbox Code Playgroud)

command-line bash gnu-parallel

3
推荐指数
1
解决办法
1127
查看次数

使用“-type d”测试时,为什么会在非目录中查找管道?

我有一个目录

~/root/
|-- bar
|-- eggs
|-- foo
|-- hello.txt
|-- script.sh
`-- spam

4 directories, 2 files
Run Code Online (Sandbox Code Playgroud)

find . -type d~/root/收益中发行

.
./spam
./eggs
./bar
./foo
Run Code Online (Sandbox Code Playgroud)

然而,发行find . -type d | parallel "echo {}" ::: *收益率

bar
eggs
foo
hello.txt
script.sh
spam
Run Code Online (Sandbox Code Playgroud)

为什么非目录hello.txtscript.sh管道在这里?

pipe find gnu-parallel

3
推荐指数
1
解决办法
152
查看次数

运行并行命令并将输出重定向到具有特定名称的文件

我无法理解并行命令是如何工作的。

我需要运行这个简单的命令:(100 次)

curl https://jsonplaceholder.typicode.com/todos/1
curl https://jsonplaceholder.typicode.com/todos/2
curl https://jsonplaceholder.typicode.com/todos/3
...
curl https://jsonplaceholder.typicode.com/todos/100
Run Code Online (Sandbox Code Playgroud)

end 将输出重定向到名称如下的文件:

1.txt
2.txt
3.txt
....
100.txt
Run Code Online (Sandbox Code Playgroud)

io-redirection gnu-parallel

3
推荐指数
1
解决办法
2760
查看次数

如何将 basename 与并行一起使用?

我在 Linux 系统上有这样的文件:

    10S1_S5_L002_chrm.fasta  SRR3184711_chrm.fasta    SRR3987378_chrm.fasta  SRR4029368_chrm.fasta  SRR5204465_chrm.fasta    SRR5997546_chrm.fasta
13_S7_L003_chrm.fasta    SRR3184712_chrm.fasta    SRR3987379_chrm.fasta  SRR4029369_chrm.fasta  SRR5204520_chrm.fasta    SRR5997547_chrm.fasta
14_S8_L003_chrm.fasta    SRR3184713_chrm.fasta    SRR3987380_chrm.fasta  SRR4029370_chrm.fasta  SRR5208699_chrm.fasta    SRR5997548_chrm.fasta
17_S4_L002_chrm.fasta    SRR3184714_chrm.fasta    SRR3987415_chrm.fasta  SRR4029371_chrm.fasta  SRR5208700_chrm.fasta    SRR5997549_chrm.fasta
3_S1_L001_chrm.fasta     SRR3184715_chrm.fasta    SRR3987433_chrm.fasta  SRR4029372_chrm.fasta  SRR5208701_chrm.fasta    SRR5997550_chrm.fasta
4_S2_L001_chrm.fasta     SRR3184716_chrm.fasta    SRR3987482_chrm.fasta  SRR4029373_chrm.fasta  SRR5208770_chrm.fasta    SRR5997551_chrm.fasta
50m_S10_L004_chrm.fasta  SRR3184717_chrm.fasta    SRR3987489_chrm.fasta  SRR4029374_chrm.fasta  SRR5208886_chrm.fasta    SRR5997552_chrm.fasta
5_S3_L001_chrm.fasta     SRR3184718_chrm.fasta    SRR3987493_chrm.fasta  SRR4029375_chrm.fasta  SRR5211153_chrm.fasta    SRR6050903_chrm.fasta
65m_S11_L005_chrm.fasta  SRR3184719_chrm.fasta    SRR3987495_chrm.fasta  SRR4029376_chrm.fasta  SRR5211162_chrm.fasta    SRR6050905_chrm.fasta
6_S6_L002_chrm.fasta     SRR3184720_chrm.fasta    SRR3987647_chrm.fasta  SRR4029377_chrm.fasta  SRR5211163_chrm.fasta    SRR6050920_chrm.fasta
70m_S12_L006_chrm.fasta  SRR3184721_chrm.fasta    SRR3987651_chrm.fasta  SRR4029378_chrm.fasta  SRR5215118_chrm.fasta    SRR6050921_chrm.fasta
80m_S1_L002_chrm.fasta   SRR3184722_chrm.fasta    SRR3987657_chrm.fasta  SRR4029379_chrm.fasta  SRR5247122_chrm.fasta    SRR6050958_chrm.fasta
Run Code Online (Sandbox Code Playgroud)

总共有 423 个,我被要求将它们分成 32 个部分,以便在 …

shell basename gnu-parallel

3
推荐指数
1
解决办法
183
查看次数

并行化 sed 给出不同的输出

然而,尝试并行化 sed 操作,当并行版本工作时,它会返回错误的输出。

我想并行化的 sed 操作(有效)

sed 's/\s.*$// ; s/\(.*\)/\L\1/' < oldfile.txt > newfile.txt
Run Code Online (Sandbox Code Playgroud)

我的上述 sed 操作的并行版本(由于某种原因无法正常工作):

parallel -a oldfile.txt -k --block $BYTES --pipe-part "sed 's/\s.*$// ; s/\(.*\)/\L\1/'" > newfile.txt
Run Code Online (Sandbox Code Playgroud)

shell sed quoting gnu-parallel

2
推荐指数
1
解决办法
995
查看次数