gpt4 book ai didi

shell - 锁定多次并行调用的shell脚本的输出文件

转载 作者:行者123 更新时间:2023-12-01 13:02:16 26 4
gpt4 key购买 nike

我有将近一百万个文件,我想在这些文件上运行一个 shell 脚本并将结果附加到一个文件中。

例如,假设我只想对文件运行 wc。为了让它运行得更快,我可以将它与 xargs 并行化。但我不希望脚本在编写输出时相互跨过。最好写入几个单独的文件而不是一个文件,然后再 cat 它们。但我仍然希望此类临时输出文件的数量明显小于输入文件的数量。有没有办法获得我想要的那种锁定,还是默认情况下始终确保这种情况?

是否有任何实用程序可以递归地 cat 并行地处理两个文件?

我可以编写一个脚本来做到这一点,但必须处理临时文件并进行清理。所以想知道是否有一个实用程序可以做到这一点。

最佳答案

GNU parallel声称它:

makes sure output from the commands is the same output as you would get had you run the commands sequentially

如果是这种情况,那么我认为将输出简单地通过管道传输到您的文件并让 parallel 处理中间数据应该是安全的。

使用 -k option保持输出的顺序。

更新:(非 Perl 解决方案)

另一种选择是 prll ,它是用带有一些 C 扩展的 shell 函数实现的。与 GNU parallel 相比,它的功能不那么丰富,但应该可以胜任基本用例。

功能列表声明:

Does internal buffering and locking to prevent mangling/interleaving of output from separate jobs.

所以只要输出顺序不重要,它应该可以满足您的需求

但是,请注意关于 this page 的以下声明:

prll generates a lot of status information on STDERR which makes it harder to use the STDERR output of the job directly as input for another program.


免责声明:我没有尝试过这两种工具,只是引用它们各自的文档。

关于shell - 锁定多次并行调用的shell脚本的输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5257646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com