0

bash スクリプトを使用します。テキストファイルの例は次のとおりです。

<Mixture> 1 1.0000
    <Mean> 39
      0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
    <Variance> 39
      1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
  <TransP> 3

今、私はゼロのシーケンスをmatlab変数である他の配列に置き換えたいと思っています。つまり、次のようにしたいです

<Mixture> 1 1.0000
    <Mean> 39
      -3.928404e+00 -2.833521e+00 1.418979e+00 -8.560805e+00 -4.987627e+00 -5.422057e+00 -2.148949e+00 -4.035418e+00 1.111476e+00 -4.360466e+00 -2.430894e+00 -3.562756e+00 2.149250e+01 4.148085e-03 3.280356e-01 1.993892e-01 4.226578e-01 3.070029e-01 3.061973e-01 2.200327e-01 2.279716e-01 1.851751e-01 2.630977e-01 2.530313e-01 1.584220e-01 -7.420680e-02 -6.129631e-02 6.845896e-03 1.414505e-02 5.905741e-02 7.828339e-02 6.020883e-02 7.195320e-02 4.838301e-02 4.507983e-02 6.380487e-02 7.884157e-02 6.597416e-02 -1.690722e-02
    <Variance> 39
      1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
  <TransP> 3
4

2 に答える 2

0

$matlabvarMatlabから受け取ったデータが含まれていると仮定します。

sed "s/ 0\.0\( 0\.0\)*/ $matlabvar/" input.txt > output.txt

これは正規表現の一致と置換です。

  • s/old/new/old-正規表現と一致するテキストをテキストに置き換えnewます
  • 0 -0に一致
  • \.-一致します。
  • \(...\)-これは含まれている要素をグループ化します
  • *-これは、前の式(グループ化された構成)の0個以上に一致します。

したがって、1つの0.0後に任意の数の追加0.0のが続くものと一致します。その後、これはに置き換えられ$matlabvarます。

正規表現については、 regular-expressions.infoですべて学ぶことができます。

于 2013-03-09T10:54:34.717 に答える
0
      <Mean> 39
          0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
      <Variance> 39
          1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
 <State> 3
  0.000e+0    1.000e+0    0.000e+0    0.000e+0    0.000e+0
  0.000e+0    5.000e-1    5.000e-1    0.000e+0    0.000e+0
  0.000e+0    0.000e+0    5.000e-1    5.000e-1    0.000e+0
  0.000e+0    0.000e+0    0.000e+0    5.000e-1    5.000e-1
  0.000e+0    0.000e+0    0.000e+0    0.000e+0    0.000e+0

それは私の全テキストファイル 残念ながら、提案されたコマンドは上記のマトリックス形式のゼロも置き換えますが、私はこれを望んでいません。 . 行番号だけでいいと思いますが、ここでもう1つの問題は、シーケンスが何行かわからないことです。それで何か方法はありますか?

于 2013-03-10T12:10:22.560 に答える