2

問題は次のとおりです。私のプロセスは、一連のデータを次の形式で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\]'

次に、関心のある番号ごとにgreponoutを使用します。後で私はこれをしました

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

各プロセスの結果を保存します(ヒント:私はbashの初心者です)。私の質問はこれです:

どうすれば次のようなことができますか

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

各プロセスの結果はどこで独自のファイルに送信されますか?プロセスはファイルに書き込みを行わないため、ソリューションはbash(またはおそらくawk)である必要があります。

編集1:
プロセスは相互に通信しないため、stdoutに書き込まれる各プロセスの順序を保持する必要はありません。

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 に答える