我有近百万个文件,我想在其上运行shell脚本并将结果附加到单个文件中。
例如,假设我只想对文件运行wc
。
为了使其快速运行,我可以将其与xargs
并行化。但是我不希望脚本在写输出时互相跳过。写入几个单独的文件而不是一个文件然后cat
它们可能更好。但我仍然希望这些临时输出文件的数量远远小于输入文件的数量。有没有办法获得我想要的锁定类型,还是默认情况下始终确保的情况?
是否有任何并行递归cat
两个文件的实用程序?
我可以写一个脚本来做到这一点,但必须处理临时工并清理。所以想知道是否有一个实用程序可以做到这一点。
答案 0 :(得分:4)
GNU parallel声称:
确保命令的输出 你得到的输出相同 你按顺序运行命令
如果是这种情况,那么我认为将输出简单地传递到文件并让parallel
处理中间数据应该是安全的。
使用-k
option维护输出的顺序。
另一个替代方案是prll,它是通过带有一些C扩展的shell函数实现的。与GNU parallel
相比,它功能较少,但应该是基本用例的工作。
功能列表声明:
只要输出顺序不重要,它就应该满足你的需求内部缓冲和锁定 防止错误/交错 单独工作的输出。
但请注意this page上的以下声明:
prll会产生很多状态 有关STDERR的信息 更难使用的STDERR输出 直接作为另一个人的输入 程序
免责声明:我没有尝试过这两种工具,只是引用了各自的文档。