【问题标题】:GNU parallel output progress while output to file输出到文件时的 GNU 并行输出进度
【发布时间】:2013-09-16 21:46:15
【问题描述】:

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

cat full_path.csv | parallel --progress -j +0 'echo -n {},; pdfgrep -c [^_] {};' > path_count.csv

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;'

文件 path_count 还是有进度的乱码。

感谢任何帮助。谢谢 阿尔文

【问题讨论】:

    标签: bash parallel-processing gnu-parallel


    【解决方案1】:

    您看到的行为不是 GNU Parallel 的设计目的:--progress 通常被发送到 STDERR 而不是 STDOUT 正是出于这个原因:

    $ seq 3 | bin/parallel --progress echo {} >/tmp/out
    
    Computers / CPU cores / Max jobs to run
    1:local / 8 / 3
    
    Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
    local:0/3/100%/0.0s
    $ cat /tmp/out
    1
    2
    3
    

    是否对 GNU Parallel 进行了本地修改?你能在其他系统上重现这个问题吗?

    PS:为什么要尝试而不是'echo -n':--tag

    【讨论】:

    • 谢谢,我真的不确定标签如何替换 echo -n {}。也许是我的脚本的一个例子?
    • --tag 会将序列号添加到由制表符分隔的输出行的开头,因此在您的情况下,您可能会在目标文件中看到(转义字符,因为 cmets 中没有换行符): 1 \t 输出,去,这里 \n 2 \t 更多,输出,这里
    【解决方案2】:

    尝试使用 exec 在子 shell 中完全重定向它:

    : > path_count.csv  ## truncate file
    cat full_path.csv | parallel --progress -j +0 'exec >>path_count.csv; echo -n {},; pdfgrep -c [^_] {};'
    

    【讨论】:

    • 很好,虽然我必须处理文件“path_count”中的格式。我有多个 echo 输出,然后是 pdfgrep 输出。与“echo -n”和/或只是“echo”的各种组合中,parallel -k 和 parallel --group 不起作用。谢谢。
    • @AlvinDas 您希望将每个实例重定向到另一个文件吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 2011-05-18
    相关资源
    最近更新 更多