3

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

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

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

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

4

1 回答 1

4

GNU 并行声称它:

确保命令的输出与按顺序运行命令时的输出相同

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

使用该-k选项来维护输出的顺序。

更新:(非 Perl 解决方案)

另一种选择是prll,它是用带有一些 C 扩展的 shell 函数实现的。与基本用例相比,它的功能较少,GNU parallel但应该是工作。

功能列表声称:

进行内部缓冲和锁定,以防止来自不同作业的输出错位/交错。

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

但是,请注意此页面上的以下声明:

prll 会在 STDERR 上生成大量状态信息,这使得将作业的 STDERR 输出直接用作另一个程序的输入变得更加困难。


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

于 2011-03-10T10:11:02.113 回答