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

时间:2011-03-10 09:24:42

标签: shell locking parallel-processing xargs

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

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

是否有任何并行递归cat两个文件的实用程序?

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

1 个答案:

答案 0 :(得分:4)

GNU parallel声称:

  

确保命令的输出   你得到的输出相同   你按顺序运行命令

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

使用-k option维护输出的顺序。

更新:(非Perl解决方案)

另一个替代方案是prll,它是通过带有一些C扩展的shell函数实现的。与GNU parallel相比,它功能较少,但应该是基本用例的工作。

功能列表声明:

  

内部缓冲和锁定   防止错误/交错   单独工作的输出。

只要输出顺序不重要,它就应该满足你的需求

但请注意this page上的以下声明:

  

prll会产生很多状态   有关STDERR的信息   更难使用的STDERR输出   直接作为另一个人的输入   程序


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