根据输出(BASH)将过程输出存储在文件中

时间:2013-03-22 09:51:31

标签: bash awk grep

问题在于:我的进程按以下格式将一系列数据写入stdout:

[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\]'

然后我在 out 上使用grep获取每个感兴趣的数字。后来我做了这个

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

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

我该怎么做

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

将每个进程的结果发送到自己的文件?这些进程不会写入文件,所以解决方案必须是bash(或者甚至是awk)。

编辑1:
这些进程不会相互通信,所以不需要保留订单,每个进程写入stdout。

1 个答案:

答案 0 :(得分: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
相关问题