我正在使用 xargs 产生的多个并行进程处理一个文本文件。我还需要将每个进程的标准输出捕获到一个单独的日志文件中。下面是一个示例,其中每个进程的输出交织到一个文件中——这不是我想要的。
理想情况下,每个日志文件都应按文件行号编号,即logfile-1、logfile-2等。
cat inputfile.txt | xargs -n 1 -P 8 ./myScript.sh | tee logfile
如果可能的话,最好避免使用外部包装脚本,但如果有办法用 here 文档包装 myScript,那就行得通了。
最佳答案
试试这个:
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
的参数。
关于Bash:从多个 xargs 并行进程记录标准输出到单独的日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26167204/