标签: gnu-parallel

gnu parallel:将每个作业输出到不同的文件

我试图awk使用该parallel命令作为shell脚本处理所有文本文件,但无法将其输出到另一个文件

如果我尝试:

seq 10 | parallel awk \''{ if ( $5 > 0.4 ) print $2}'\' file{}.txt > file{}.out
Run Code Online (Sandbox Code Playgroud)

它输出到文件file{}.out,而不是file1.out,file2.out等等.

教程和手册页也建议我可以使用--files,但它只是打印到stdout:

seq 10 | parallel awk \''{ if ( $5 > 0.4 ) print $2}'\' file{}.txt --files file{}.out
Run Code Online (Sandbox Code Playgroud)

bash gnu-parallel

7
推荐指数
2
解决办法
3417
查看次数

GNU parallel --jobs选项在群集上使用多个节点,每个节点有多个cpus

我正在使用gnu parallel在高性能(HPC)计算集群上启动代码,每个节点有2个CPU.该集群使用TORQUE便携式批处理系统(PBS).我的问题是澄清GNU并行的--jobs选项如何在这种情况下工作.

当我在没有--jobs选项的情况下运行调用GNU parallel的PBS脚本时,如下所示:

#PBS -lnodes=2:ppn=2
...
parallel --env $PBS_O_WORKDIR --sshloginfile $PBS_NODEFILE \
  matlab -nodiplay -r "\"cd $PBS_O_WORKDIR,primes1({})\"" ::: 10 20 30 40
Run Code Online (Sandbox Code Playgroud)

看起来它每个核心只使用一个CPU,并且还提供以下错误流:

bash: parallel: command not found
parallel: Warning: Could not figure out number of cpus on galles087 (). Using 1.
bash: parallel: command not found
parallel: Warning: Could not figure out number of cpus on galles108 (). Using 1.
Run Code Online (Sandbox Code Playgroud)

这看起来像每个节点一个错误.我不明白第一部分(bash: parallel: command not found),但第二部分告诉我它正在使用一个节点.

当我将选项添加-j2到并行调用时,错误消失了,我认为它每个节点使用两个CPU.我仍然是HPC的新手,所以我检查这个的方法是从我的代码中输出日期时间戳(虚拟matlab代码需要10秒才能完成).我的问题是:

  1. --jobs正确使用该选项吗?指定是否正确,-j2因为每个节点有2个CPU?或者我应该使用-jN …

hpc gnu-parallel

7
推荐指数
1
解决办法
4017
查看次数

GNU与变量序列并行?

我想prog使用GNU来并行运行程序parallel,其中一个参数在序列中获取值.例如:

parallel prog ::: {1..100}
Run Code Online (Sandbox Code Playgroud)

但是,我事先并不知道序列的上限,所以我希望能够做到这样的事情:

parallel prog ::: {1..$x}
Run Code Online (Sandbox Code Playgroud)

$x我在哪里计算的数字在哪里.我怎样才能做到这一点?

bash gnu-parallel

7
推荐指数
1
解决办法
997
查看次数

如何并行化"make"命令,可以在多台机器上分配任务

我一直在编译一个".c/.c ++"代码,需要1.5小时才能使用"make"命令在4核心机器上编译.我还有10台机器可以用来编译.我知道"make"中的"-j"选项,它在指定数量的线程中分配编译.但是"-j"选项仅在当前机器上分配线程,而不是在网络中连接的其他10台机器上分配线程.

我们可以使用MPI或其他并行编程技术,但我们需要根据并行编程语言重写"MAKE"命令实现.

有没有其他方法可以利用其他可用的机器进行编译?谢谢

parallel-processing makefile compilation linux-kernel gnu-parallel

7
推荐指数
1
解决办法
1080
查看次数

并行分割文本和进程

我有一个程序可以生成很多(太字节)的输出并将其发送到stdout.

我想分割输出并与另一个程序的一堆实例并行处理它.它可以以任何方式分发,只要线条保持完整即可.

Parallel可以执行此操作,但它需要固定数量的行并在此之后重新启动过滤器进程:

./relgen | parallel -l 100000 -j 32 --spreadstdin ./filter
Run Code Online (Sandbox Code Playgroud)

有没有办法保持一定数量的进程运行并在它们之间分配数据?

parallel-processing bash gnu-parallel

7
推荐指数
1
解决办法
390
查看次数

使用GNU Parallel继承环境变量

我想在GNU Parallel中继承环境变量.我有几个'脚本'(实际上只是命令列表,设计用于GNU Parallel),每个都有数百行,所有行都调用不同的外部程序.但是,这些外部程序(不受我的控制)要求在它们运行之前设置几个环境变量.

在本地设置/导出它们似乎没有帮助,我没有看到任何方法将此信息添加到配置文件.

文档似乎没有任何内容,类似的SO页面建议将命令包装在脚本中.然而,这似乎是一个不优雅的解决方案.有没有办法导出当前环境,或者可能在脚本中指定所需的变量?

谢谢!

environment-variables gnu-parallel

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

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

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

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

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

gnu-parallel

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

并行grep模式多个文件

我正在使用此命令成功搜索:从ips.txt日志目录(压缩文件)中的 txt 文件中搜索可疑 IP 列表。

root@yop# find /mylogs/ -exec zgrep -i -f ips.txt {} \; > ips.result.txt
Run Code Online (Sandbox Code Playgroud)

我现在想使用并行与它使用..以加快搜索速度。我目前无法找到正确的参数。我的意思是使用模式文件(每行一个)并将其导出到结果文件中。

请问有没有类似的大师?

我发现的更接近的命令是: grep-or-anything-else-many-files-with-multiprocessor-power

但是无法将它与模式文件列表一起使用并将结果导出到文件中......

请帮忙,谢谢大家。

parallel-processing bash grep gnu-parallel

6
推荐指数
2
解决办法
3726
查看次数

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

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

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

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

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

我可以吗:

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

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

stdin split file gnu-parallel

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

Bash中并行迭代IP地址

我正在处理一个大型的private/8网络,需要枚举所有正在侦听端口443并在HTTP HEADER响应中声明的特定版本的Web服务器.

首先,我想nmap通过连接扫描运行并通过输出文件grep自己,但结果却抛出许多误报,其中nmap声明端口被"过滤"而实际上它是"打开"(使用连接扫描:) nmap -sT -sV -Pn -n -oA foo 10.0.0.0/8 -p 443.

所以现在我想用bash编写脚本curl- 伪代码就像:

for each IP in 10.0.0.0/8  
do:  
    curl --head https://{IP}:443 | grep -iE "(Server\:\ Target)" > {IP}_info.txt;  
done  
Run Code Online (Sandbox Code Playgroud)

由于我不熟悉bash,我不确定如何正确编写脚本 - 我必须:

  • 循环遍历所有IP
  • 确保只有X威胁并行运行
  • 理想情况下,将输出切换为仅在一个文件中记下匹配主机的IP
  • 理想情况下,请确保仅记下匹配的服务器版本

任何建议或指向一个方向是高度赞赏.

linux bash curl gnu-parallel

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