标签: gnu-parallel

为什么在本教程中使用GNU Parallel --jobs 4选项运行5个作业?

我正在通过GNU Parallel教程工作。在“多个参数”部分中,有以下示例(注意:num30000是一个文本文件,其顺序行上的数字为1到30,000):

为了获得更好的并行性,当满足文件结尾时,GNU Parallel可以在所有并行作业之间分配参数。

并行运行4个作业会将参数的最后一行拆分为4个作业,从而导致总共5个作业:

  cat num30000 | parallel --jobs 4 -m echo | wc -l
Run Code Online (Sandbox Code Playgroud)

输出:

  5
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么我们期望有5个职位?尽管我不知道这很重要,但我显然遗漏了一点。我预计会有4个工作,因为30,000被4整除。我决定运行以下命令后发布此问题:

cat num30000 | parallel --jobs 4 -m echo | colrm 12
Run Code Online (Sandbox Code Playgroud)

结果是:

1 2 3 4 5 6
23696 23697
25273 25274
26850 26851
28427 28428
Run Code Online (Sandbox Code Playgroud)

在我看来,这就像第一个echo命令传递了前23695个参数一样。然后,将剩余的工作分解为另外4个作业,其参数计数分别为1577、1577、1577和1574。我是否误解了对parallel的调用应该做什么?谢谢!

gnu-parallel

6
推荐指数
1
解决办法
1283
查看次数

当其中任何一个作业终止时,如何停止gnu并行作业?

假设我使用以下gnu parallel命令运行N个作业:

seq $N | parallel -j 0 --progress ./job.sh
Run Code Online (Sandbox Code Playgroud)

如何调用并行来杀死所有正在运行的作业,并且只要其中任何一个退出就不再接受它们?

gnu-parallel

6
推荐指数
1
解决办法
1606
查看次数

将STDIN拆分为多个文件(如果可能,将其压缩)

我有程序(gawk)将数据流输出到其STDOUT.处理的数据实际上是10英镑.我不想将它保存在单个文件中,而是将其拆分为块,并可能在保存之前对每个文件应用一些额外的处理(如压缩).

我的数据是一系列记录,我不想拆分将记录减半.每条记录都匹配以下正则表达式:

^\{index.+?\}\}\n\{.+?\}$

或者为了简单起见,可以假设两行(首先是不均匀的,甚至在从流的开始编号时)始终记录.

我可以吗:

  • 使用一些标准的linux命令通过定义块的优选大小来拆分STDIN?不需要精确给定记录变量大小不能保证它.或者只是def的记录数量.按大小不可能
  • 压缩每个块并存储在一个文件中(在其名称中有一些编号,如001,002等..)

我已经意识到像GNU并行的命令,csplit但不知道如何把它放在一起.如果上面解释的功能可以在不编写自定义perl脚本的情况下实现,那将是很好的.然而,这可能是另一个,最后的解决方案,但再次,不知道如何最好地实现它.

stdin split file gnu-parallel

6
推荐指数
1
解决办法
2763
查看次数

在 GNU 并行中执行 SCP

我需要并行运行一些命令,包括 SCP。为此,我使用 GNU Parallel。问题是我不知道如何将密码传递给 SCP。这是与我正在运行的类似的一行:

ls 2011_* | parallel scp {} user@domain
Run Code Online (Sandbox Code Playgroud)

如果ls找到3个文件,scp同时询问3次密码,我只能将密码输入到最后一个进程来提示输入。

我暂时解决了使用公钥连接的问题,但由于公司政策,这在将来不会成为一个选择。我阅读了 SCP 手册页,但找不到选项,但我非常有信心 Parallel 应该有一个选项允许我输入密码。

有人知道解决这个问题的方法吗?

编辑:我想知道是否有一种方法可以告诉parallel密码,以便它可以在scp每次询问时提供密码。也许有这样的事情:

ls 2011_* | parallel scp {} user@domain < file_with_password.txt
Run Code Online (Sandbox Code Playgroud)

但指定重定向STDIN是 forscp而不是 for lsor parallel

bash scp gnu-parallel

5
推荐指数
1
解决办法
2073
查看次数

GNU 并行显示剩余的作业

我想这个问题/问题可以通过满足以下一个(或多个)问题来解决

1) 如何显示剩余的工作?2)我如何漂亮的输出--eta

1) 我已经检查了手册页,我目前在我的函数中使用 $PARALLEL_SEQ,但是我怎样才能获得剩余的工作?Parallel 帮助我编译了大约 800 个文件,我想知道我的剩余工作。

2)或者,有没有更好(更好)的输出方式--eta?我的输出看起来很乱。我只想看到一个 ETA。

我使用的并行标志: --no-notice --keep-order --group

输出示例:

819: Compiling form: USER_Q                         ok
ETA: 8s 13left 0.61avg  local:4/819/100%/0.6s

820: Compiling form: USER_RESERVE_STOCK             ok
ETA: 7s 12left 0.61avg  local:4/820/100%/0.6s

821: Compiling form: USERS_AUTO                     ok
ETA: 7s 11left 0.61avg  local:4/821/100%/0.6s

822: Compiling form: USERS                          ok
ETA: 6s 10left 0.61avg  local:4/822/100%/0.6s

823: Compiling form: USERS_MENU                     ok
ETA: 6s 9left 0.61avg  local:4/823/100%/0.6s

824: Compiling form: USER_SUPP                      ok
ETA: 4s 8left 0.61avg  local:4/824/100%/0.6s

825: …
Run Code Online (Sandbox Code Playgroud)

parallel-processing gnu-parallel

5
推荐指数
1
解决办法
488
查看次数

从 GNU 并行调用 GNU 并行

嵌套调用的正确方法是GNU parallel什么?

愚蠢的例子:

seq 1 100 | parallel echo {} | parallel seq {} 1000
Run Code Online (Sandbox Code Playgroud)

我的理解是,在 8 个 CPU 的机器上,每个并行将启动 8 个作业,总共 64 个作业。如果您调用的内容比seq这更重要,则可能会使盒子过载。有没有办法限制作业数量但仍然充分利用并行性?

shell gnu-parallel

5
推荐指数
1
解决办法
253
查看次数

GNU 并行:-k(保持输出顺序)会影响速度吗?

正如标题中所说,我想知道该-k选项(强烈)是否会影响 GNU 并行的速度。

man parallel_tutorial存在关于讨论--ungroup--line-buffer,其声称--linebuffer,其unmixes输出线,比要慢得多--ungroup。那么-k当工作数量很大时,也许也会导致大幅放缓?

(我没有在man parallel或 中找到这个主题man parallel_tutorial;我也没有在谷歌上找到任何东西。不过我还没有完成man parallel,所以如果我错过了一些搜索较少的东西,请原谅。)

parallel-processing gnu-parallel

5
推荐指数
1
解决办法
1643
查看次数

GNU Parallel - 将输出重定向到具有特定名称的文件

在 bash 中,我正在运行 GnuPG 来解密一些文件,并且我希望将输出重定向到具有相同名称但具有不同扩展名的文件。基本上,如果我的文件被命名

file1.sc.xz.gpg
Run Code Online (Sandbox Code Playgroud)

运行 GnuPG 工具后出现的文件我想存储在另一个名为

file1.sc.xz 
Run Code Online (Sandbox Code Playgroud)

我目前正在尝试

find . -type f | parallel "gpg {} > {}.sc.xz"
Run Code Online (Sandbox Code Playgroud)

但这会生成一个名为 file1.sc.xz.gpg.sc.xz 的文件。我怎样才能做到这一点?

稍后编辑:我想在一个单独的 bash 命令中执行此操作,而无需事先知道文件名。

linux bash gnu-parallel

5
推荐指数
1
解决办法
7255
查看次数

GNU 并行:对文件夹中的所有文件并行执行一个命令

我正在尝试使用不同的参数并行化粒子模拟以节省一些时间。因此,我想GNUparallel用于为不同的参数运行 bash 脚本。该脚本读取一个文件,然后执行模拟,例如:

$bash script <<< input file

然而:-

$cd ~/parameter_files ls | parallel bash script <<< {}

根本不起作用。我是 Linux 和 GNUparallel 的新手,所以希望有人可以提供帮助。

linux bash gnu-parallel

5
推荐指数
2
解决办法
3725
查看次数

GNU Parallel:如何将作业 ID 传递给命令

假设我在从标准输入接收的一组项目上并行运行 gnu,并根据某些标准进行拆分:

cat content | parallel -j 4 my_command
Run Code Online (Sandbox Code Playgroud)

如何访问作业编号,以便我可以将并行执行的作业编号/ID 作为参数传递给命令(以便每个并行执行块具有唯一编号):

cat content | parallel -j 4 my_command -n ???
Run Code Online (Sandbox Code Playgroud)

(这甚至可能吗?现在查看手册页)

gnu-parallel

5
推荐指数
1
解决办法
469
查看次数

标签 统计

gnu-parallel ×10

bash ×3

linux ×2

parallel-processing ×2

file ×1

scp ×1

shell ×1

split ×1

stdin ×1