我正在处理一个由xargs生成的多个并行进程的文本文件。我还需要将每个进程的stdout捕获到一个单独的日志文件中。下面是一个示例,其中每个进程的输出被交织到一个文件中--这不是我想要的。
理想情况下,每个日志文件应该按照文件行号编号,即logfile-1、logfile-2等等。
cat inputfile.txt | xargs -n 1 -P 8 ./myScript.sh | tee logfile如果可能的话,最好避免使用外部包装器脚本,但是如果有一种方法将myScript包装成一个here文档,那就可以了。
发布于 2014-10-02 21:42:04
试试这个:
nl inputfile.txt | xargs -n 2 -P 8 sh -c './myScript.sh "$1" > logfile-$0'这假设inputfile.txt中的每个参数都在自己的行上,不包含空格。nl命令对每一行进行编号,这将每个参数与唯一的数字配对。xargs命令同时接受两个参数,第一个参数是行号,第二个参数是来自inputfile.txt的对应行,并将它们传递给sh。sh命令使用参数分别生成输出文件名和myScript.sh参数。
发布于 2014-10-02 21:50:38
您可以使用GNU并行和它的-k选项来保持输出在一个日志文件中的顺序:
cat input | parallel -k ./myScript.sh > file.log您可以在-j 8之后添加parallel,以保持8个内核的忙碌,但默认情况下,它将使所有内核都保持忙碌。
https://stackoverflow.com/questions/26167204
复制相似问题