标签: gnu-parallel

输出到文件时的 GNU 并行输出进度

我有一个简单的 bash 脚本可以运行:

cat full_path.csv | parallel --progress -j +0 'echo -n {},; pdfgrep -c [^_] {};' > path_count.csv
Run Code Online (Sandbox Code Playgroud)

Parallel 的进度指示器"--progress",写入文件path_count.csv。我只想echo {}pdfgrep {}写入文件,同时显示--progress到屏幕输出。

如果我做 :

cat full_path.csv | parallel --progress -j +0  'echo -n {},>>path_count.csv; pdfgrep -c [^_] {}>>path_count.csv;'
Run Code Online (Sandbox Code Playgroud)

文件 path_count 仍然是乱码。

任何帮助表示赞赏。谢谢阿尔文

parallel-processing bash gnu-parallel

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

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:带有主机名的前缀输出

parallel当我在多台主机上运行相同命令时,是否可以在gnu输出的前面加上前缀?

我在一个工作池中有10台工作计算机,其中任何一台都可以接管工作,我想通过grep在所有日志文件中找出是哪个工作人员接管了:

parallel --nonall -S host1,host2,host3 grep job_id_123 /var/log/my_log.log
Run Code Online (Sandbox Code Playgroud)

打印类似:

initing job_id_123
doing phase1 job_id_123
doing phase2 job_id_123
wrapping up job_id_123
Run Code Online (Sandbox Code Playgroud)

我想要的是

host2: initing job_id_123
host2: doing phase1 job_id_123
host3: doing phase2 job_id_123
host1: wrapping up job_id_123
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做:

parallel --nonall -S host1,host2,host3 "hostname && grep job_id_123 /var/log/my_log.log"
Run Code Online (Sandbox Code Playgroud)

但是前缀是我所希望的。

我使用GNU parallel 20160422Ubuntu precise (12.04.5 LTS)

parallel-processing ubuntu gnu gnu-parallel

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

bash从多个线程追加文件

我正在处理大数据,正在尝试并行化流程功能。我可以使用多个线程,每个用户处理的都是不同的线程(我有20万个用户)。

每个线程应n在输出文件中附加文件的第一行,该文件在所有线程之间共享一个输出文件。

我编写了一个Java程序来执行head -n 256 thread_processed.txt >> output(每个线程都会执行此操作)

我需要以原子方式编写输出文件。

如果线程A从0到9写了行,线程B从10到19写了行,则输出应为:[0...9 10... 19]。线不能重叠,不能像[0 1 2 17 18 3 4 ...]

如何在bash脚本中管理对输出文件的并发写访问?

bash multithreading thread-safety gnu-parallel

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

gnu并行化for循环

我已经看过几个关于这个主题的问题,但我没有能力将其转化为我的具体问题.我有一个for循环遍历子目录,然后在每个目录内的压缩文本文件上执行.sh脚本.我想并行化这个过程,但我正在努力应用gnu parallel.

这是我的循环:

for d in ./*/ ; do (cd "$d" && script.sh); done
Run Code Online (Sandbox Code Playgroud)

我知道我需要并行输入一个列表,所以我一直在尝试这个:

ls -d */ | parallel cd && script.sh
Run Code Online (Sandbox Code Playgroud)

虽然这似乎已经开始,但是当gzip尝试解压缩目录中的一个txt文件时,我收到一个错误,说该文件不存在:

gzip: *.txt.gz: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但是,当我运行原始for循环时,除了需要一个世纪才能完成之外我没有任何问题.此外,我在使用并行时只获得一次gzip错误,考虑到我有超过1000个子目录,这是非常奇怪的.

我的问题是:

  1. 在我的案例中如何让Parallel工作?如何并行将.sh脚本的应用程序并行化到自己子目录中的1000个文件?即 - 我的问题的解决方案是什么?我必须取得进步.

  2. 我错过了什么?语法,循环,坏脚本?我想学习.

  3. 并行实际上是否尝试并行运行所有这些.sh脚本?为什么我的每个.txt.gz文件都没有出错?

  4. 并行是应用程序的最佳选择吗?还有其他选择更适合我的需求吗?

parallel-processing bash ubuntu gnu gnu-parallel

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

GNU Parallel中的基本名称

我有数百个文件,命名如下:

RG1-t.txt

RG1-n.txt

RG2-t.txt

RG2-n.txt

等等...

我想使用GNU并行在它们上运行脚本,但是我很难获取文件的基本名称,因此RG1,RG2等...这样我就可以运行:

ls RG*.txt | parallel "command.sh {basename}-t.txt {basename}-n.txt > {basename}.out"
Run Code Online (Sandbox Code Playgroud)

导致文件RG1.out,RG2.out等。有什么想法吗?

gnu gnu-parallel

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

如何使用GnuPG和GNU并行进行大文件并行加密?

我正在尝试编写并行压缩/加密备份脚本,以使用GNU parallel,xz和GnuPG进行归档。脚本的核心部分是:

tar --create --format=posix --preserve-permissions --same-owner --directory $BASE/$name --to-stdout . \
    | parallel --pipe --recend '' --keep-order --block-size 128M "xz -9 --check=sha256 | gpg --encrypt --recipient $RECIPIENT" \
    | pv > $TARGET/$FILENAME
Run Code Online (Sandbox Code Playgroud)

没有GnuPG加密,它会很好地工作(解压缩和解压缩工作),但是添加并行加密后,它解密失败,并出现以下错误:

[don't know]: invalid packet (ctb=0a)
gpg: WARNING: encrypted message has been manipulated!
gpg: decrypt_message failed: Unexpected error
: Truncated tar archive
tar: Error exit delayed from previous errors.
Run Code Online (Sandbox Code Playgroud)

因为未压缩的大小与gnu parallel的块大小相同(大约125M),所以我认为这与GnuPG对部分块加密的支持有关。我怎么解决这个问题?


费耶

关于随机数生成的另一个并行gpg加密问题

https://unix.stackexchange.com/questions/105059/parallel-pausing-and-resuming

encryption parallel-processing gnupg pgp gnu-parallel

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

在仅打印出有错误的文件时如何递归所有文件递归?

我只想打印当前(递归)目录中的所有文件,而仅打印出有错误的文件,并在完成替换后将变量分配给1。

#!/bin/bash

lint_failed=0
find . -path ./vendor -prune -o -name '*.php' | parallel -j 4 sh -c 'php -l {} || echo -e "[FAIL] {}" && lint_failed=1';

if [ "$lint_failed" -eq "1" ]; then
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

范例

[失败] ./app/Model/Example.php

上面的代码找不到任何错误,但是如果我运行php -l ./app/Model/Example.php,则会返回错误。

php bash gnu-parallel phplint

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