问题在于:我的进程按以下格式将一系列数据写入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。
答案 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