2

这是问题所在:我的进程以以下格式将一系列数据写入标准输出:

[1] i: 0 X: 0 Y: 0
[1] i: 1 X: 1 Y: 0
[2] i: 0 X: 0 Y: 0
[2] i: 1 X: 1 Y: 0
[2] i: 2 X: 2 Y: 0
[4] i: 0 X: 0 Y: 0

它是一个用 MPI 编写的分布式解决方案。

我想要做的是根据括号之间的值(即处理器 ID)将输出放入不同的文件中,以便我可以更轻松地找到每个进程崩溃的位置。

到目前为止,我的方法是运行

test.sh > out | grep '\[2\]'

然后,我对每个感兴趣的数字使用 grep 。后来我做了这个

cat out | grep '\[2\]' > out.2

存储每个进程的结果(提示:我是 bash 新手)。我的问题是这样的:

我该怎么做

test.sh > out | grep '\[${N}\]' > out.${N}

每个进程的结果被发送到自己的文件中?这些进程不会写入文件,因此解决方案必须使用 bash(甚至可能是 awk)。

编辑1:
进程不相互交谈,因此无需保留每个进程写入标准输出的顺序。

4

1 回答 1

2

您可以将您的输出通过管道test.sh传输到

..|awk -F'[][]' '{print $0 > ("out."$2)}'

此行将为您生成文件。

使用您的示例输入进行测试:

kent$  echo "[1] i: 0 X: 0 Y: 0
[1] i: 1 X: 1 Y: 0
[2] i: 0 X: 0 Y: 0
[2] i: 1 X: 1 Y: 0
[2] i: 2 X: 2 Y: 0
[4] i: 0 X: 0 Y: 0"|awk -F'[][]' '{print $0 > ("out."$2)}'

kent$  head out*
==> out.1 <==
[1] i: 0 X: 0 Y: 0
[1] i: 1 X: 1 Y: 0

==> out.2 <==
[2] i: 0 X: 0 Y: 0
[2] i: 1 X: 1 Y: 0
[2] i: 2 X: 2 Y: 0

==> out.4 <==
[4] i: 0 X: 0 Y: 0
于 2013-03-22T09:57:16.547 回答