Questions tagged «gnu-parallel»

GNU parallel是一个命令行实用程序,用于并行运行程序

10
并行化Bash FOR循环
我一直在尝试使用GNU Parallel并行化以下脚本,尤其是三个FOR循环实例中的每个实例,但未能做到。FOR循环中包含的4条命令是串行运行的,每个循环大约需要10分钟。 #!/bin/bash kar='KAR5' runList='run2 run3 run4' mkdir normFunc for run in $runList do fsl5.0-flirt -in $kar"deformed.nii.gz" -ref normtemp.nii.gz -omat $run".norm1.mat" -bins 256 -cost corratio -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 12 fsl5.0-flirt -in $run".poststats.nii.gz" -ref $kar"deformed.nii.gz" -omat $run".norm2.mat" -bins 256 -cost corratio -searchrx -90 90 …

1
GNU parallel vs&(我的意思是背景)vs xargs -P
我对.sh使用脚本在脚本中运行一组任务的区别或优势(如果有)感到困惑GNU parallel 例如,Ole Tange的答案: parallel ./pngout -s0 {} R{} ::: *.png 而不是说遍历它们将它们置于背景中&。 例如弗罗斯特斯的答案: #copied from the link for illustration for stuff in things do ( something with stuff ) & done wait # for all the something with stuff 简而言之,它们只是在语法上还是实际上在不同?如果实际上不同,我什么时候应该使用它们?

6
使用GNU Parallel的Parallelise rsync
我一直在使用rsync脚本来将一台主机上的数据与另一台主机上的数据同步。数据中包含许多小型文件,这些文件几乎占了1.2TB。 为了同步这些文件,我一直使用rsync如下命令: rsync -avzm --stats --human-readable --include-from proj.lst /data/projects REMOTEHOST:/data/ proj.lst的内容如下: + proj1 + proj1/* + proj1/*/* + proj1/*/*/*.tar + proj1/*/*/*.pdf + proj2 + proj2/* + proj2/*/* + proj2/*/*/*.tar + proj2/*/*/*.pdf ... ... ... - * 作为测试,我选择了其中两个项目(8.5GB数据),并执行了上面的命令。作为一个顺序过程,它需要14分58秒才能完成。因此,对于1.2TB的数据,将需要几个小时。 如果我能多rsync在并行处理(使用&,xargs或parallel),这将节省我的时间。 我尝试使用下面的命令parallel(cd进入源目录后),花了12分37秒执行: parallel --will-cite -j 5 rsync -avzm --stats --human-readable {} REMOTEHOST:/data/ ::: …

6
使用并行将唯一的输入文件处理为唯一的输出文件
我遇到了一个shell脚本问题,在该脚本中,我给了一个充满输入文件的目录(每个文件包含许多输入行),我需要单独处理它们,将它们的每个输出重定向到唯一文件(又名file_1.input需要)。在file_1.output中捕获,依此类推)。 Pre-parallel之前,我将遍历目录中的每个文件并执行我的命令,同时使用某种计时器/计数技术以免使处理器不堪重负(假设每个进程的运行时间恒定)。但是,我知道情况并非总是如此,因此使用类似“并行”的解决方案似乎是无需编写自定义代码即可获得Shell脚本多线程的最佳方法。 尽管我已经想到了一些方法来并行处理这些文件(并允许我高效地管理内核),但它们似乎都是很棘手的。我有一个非常简单的用例,因此希望尽可能保持整洁(并且并行示例中的任何内容似乎都不是我的问题。 任何帮助,将不胜感激! 输入目录示例: > ls -l input_files/ total 13355 location1.txt location2.txt location3.txt location4.txt location5.txt 脚本: > cat proces_script.sh #!/bin/sh customScript -c 33 -I -file [inputFile] -a -v 55 > [outputFile] 更新:阅读下面Ole的答案后,我能够将缺少的部分放到我自己的并行实现中。尽管他的回答很好,但以下是我的补充研究和记录: 我没有执行我的整个过程,而是从概念验证命令开始,以证明他在我的环境中的解决方案。请参阅我的两个不同的实现(和注释): find /home/me/input_files -type f -name *.txt | parallel cat /home/me/input_files/{} '>' /home/me/output_files/{.}.out 使用find(不是ls,这可能会导致问题)在我的输入文件目录中找到所有适用的文件,然后将其内容重定向到单独的目录和文件。我上面的问题是阅读和重定向(实际脚本很简单),因此用cat替换脚本是一个很好的概念证明。 parallel cat '>' …

2
为什么(GNU?)并行无提示地失败,我该如何解决?
在用于后期处理某些模拟数据的较大脚本中,我有以下代码行: parallel bnzip2 -- *.bz2 如果我理解parallel正确(可能无法理解),应在列出扩展名的所有文件上运行程序的n核线程。您可能会注意到我拼错了命令bunzip2。我希望在这里看到警告或错误消息,但它会静默失败。这是故意的吗?将来我怎么不会被这个烦恼呢? 更新: 可能我parallel安装的安装方式与我认为的不同: > parallel --version` parallel: invalid option -- '-' parallel [OPTIONS] command -- arguments for each argument, run command with argument, in parallel parallel [OPTIONS] -- commands run specified commands in parallel parallel我系统上的手册页显示: parallel(1) parallel(1) NAME parallel - run programs in parallel .... …



4
结合使用GNU Parallel和Split
我正在将一个巨大的文件加载到PostgreSQL数据库中。为此,我首先split在文件中使用以获得较小的文件(每个30Gb),然后使用GNU Parallel和将每个较小的文件加载到数据库中psql copy。 问题在于,拆分文件大约需要7个小时,然后每个内核才开始加载文件。我需要的是一种split在每次写完文件后告诉它将文件名打印到std输出的方法,这样我就可以通过管道将其传输到Parallel文件,并在split完成写操作时开始加载文件。像这样: split -l 50000000 2011.psv carga/2011_ | parallel ./carga_postgres.sh {} 我已经阅读了split手册页,但找不到任何东西。有没有办法使用split其他工具来做到这一点?

3
如何有效地使用GNU并行
假设我想在压缩文本文件中找到所有匹配项: $ gzcat file.txt.gz | pv --rate -i 5 | grep some-pattern pv --rate在这里用于测量管道吞吐量。在我的机器上,解压缩后约为420Mb / s。 现在,我正在尝试使用GNU parallel做并行grep。 $ gzcat documents.json.gz | pv --rate -i 5 | parallel --pipe -j4 --round-robin grep some-pattern 现在,吞吐量下降到〜260Mb / s。而且更有趣的parallel过程本身就是使用大量CPU。大于grep进程(但小于gzcat)。 编辑1:我尝试了不同的块大小(--block),以及-N/ -L选项的不同值。在这一点上没有任何帮助。 我究竟做错了什么?

2
可怜的GNU并行在ksh中实现?
我想使用GNU parallel的功能,在该功能中它可以执行命令和它并行输入的列表,并在完成后将其吐出,但是,我不想在所有服务器上并行安装GNU。 还是并行版本的xargs? GNU Parallel的功能是否有ksh实现?在这种情况下,不必像GNU Parallel那样按顺序完成,只要可以通过管道或存储所有输出即可。我也想避免使用临时文件。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.