首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash:从多个xargs并行进程记录stdout以分离日志文件

Bash:从多个xargs并行进程记录stdout以分离日志文件
EN

Stack Overflow用户
提问于 2014-10-02 18:29:16
回答 2查看 7.2K关注 0票数 5

我正在处理一个由xargs生成的多个并行进程的文本文件。我还需要将每个进程的stdout捕获到一个单独的日志文件中。下面是一个示例,其中每个进程的输出被交织到一个文件中--这不是我想要的。

理想情况下,每个日志文件应该按照文件行号编号,即logfile-1、logfile-2等等。

代码语言:javascript
复制
cat inputfile.txt | xargs -n 1 -P 8 ./myScript.sh | tee logfile

如果可能的话,最好避免使用外部包装器脚本,但是如果有一种方法将myScript包装成一个here文档,那就可以了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-02 21:42:04

试试这个:

代码语言:javascript
复制
nl inputfile.txt | xargs -n 2 -P 8 sh -c './myScript.sh "$1" > logfile-$0'

这假设inputfile.txt中的每个参数都在自己的行上,不包含空格。nl命令对每一行进行编号,这将每个参数与唯一的数字配对。xargs命令同时接受两个参数,第一个参数是行号,第二个参数是来自inputfile.txt的对应行,并将它们传递给shsh命令使用参数分别生成输出文件名和myScript.sh参数。

票数 8
EN

Stack Overflow用户

发布于 2014-10-02 21:50:38

您可以使用GNU并行和它的-k选项来保持输出在一个日志文件中的顺序:

代码语言:javascript
复制
cat input | parallel -k ./myScript.sh > file.log

您可以在-j 8之后添加parallel,以保持8个内核的忙碌,但默认情况下,它将使所有内核都保持忙碌。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26167204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档