FORTRAN コードでパフォーマンスを向上させるために、4 番目のインデックスが 2 番目に移動するように配列のインデックスを並べ替えたいのですが、たとえば、次の行を変更したいと考えています。
ts(l,i,j,k) = ts(l,i,j,k1(i,j))
に
ts(l,k,i,j) = ts(l,k1(i,j),i,j)
これは行の例にすぎないことに注意してください。インデックスは常に i、j、k、l と呼ばれるわけではありません... 私は配列の名前とランクを知っているだけです。したがって、4 つの引数をカンマで区切ることはできません。これは、1 つの引数がカンマを含む行列になることもあるためです (上記の場合は k1(i,j))。だから私の最初のアイデア
sed -r 's/ts\(([^,]+),([^,]+),([^)]+),([^,]+)\)/ts\(\1,\4,\2,\3\)/g' *.F
この場合 (上記のコード行の右側)、次のように失敗します。
ts(l,k,i,j) = ts(l,j),i,j,k1(i)
私が必要としているのは、最大 1 つのブラケットが開かれている場合にのみ、配列のインデックスを分割する正規表現です。誰かがsed/python/perlでこれを行う方法のヒントを教えてもらえますか?
幸運をお祈りしています