数値データファイル内の文字列の検索と置換

数値データファイル内の文字列の検索と置換

編集する必要があるデータファイルがあり、その形式は次のとおりです。

-8.915602898150751e-05-7.050591991128022e-05-4.361255125222242e-052.309505585477205e-05-2.223040239244275e-051.088544645124330e-011.000000000000000e-15
7.528375184423486e-062.558479420795495e-052.537280868441473e-04-5.119189471594489e-056.455268837875294e-054.463628820267331e-011.000000000000000e-15

ご存知のように、数字にはスペースがなく、非常に特定の方法でファイルを編集したいと思います(シミュレーション作業のための入力ファイルとして使用します)。ファイルが次のようになります。

 -1.0000000000000001e-001  0.0000000000000000e+000  0.0000000000000000e+000  4.3052618410549812e+009  0.0000000000000000e+000  0.0000000000000000e+000  2.4853118072193338e-015
  2.4106903033391415e-004  4.3586744793222273e-005  4.5561759893187341e-005 -4.0315591956328645e+007 -9.1758824977759705e+003 -2.5181138417225957e+004  2.4853118072193338e-015

この種の編集を実行するためのアルゴリズムを開発し、Notepad ++で試しましたが、プログラムはファイルに「見えない」文字を追加してシミュレーションに適していませんでした。アルゴリズムは次のとおりです。

  1. 文字列「-1」が見つかりました。文字列「-1」に置き換えられました。 (代替では、負の記号の前にスペースがあります)

  2. 数字2〜9に対して手順1を繰り返します。

  3. 文字列「1」が見つかりました。文字列「1」に置き換えられました。 (代替文の1の前にスペースが2つあります)

  4. 数字2〜9に対して手順3を繰り返します。

  5. 文字列「-1」が見つかりました。 「-1」に置き換えられました。 (検索文字列で負の記号と1の間にスペースを2つ見つけます。)

  6. 数字2〜9に対して手順5を繰り返します。

私はUNIXシェル(私はMacBookターミナルを使用しています)でこれを行いたいと思います。なぜなら、これは目に見えない文字を追加したりデータを破壊したりしないと信じているからです。助けが必要ですか?

よろしくお願いします! ! ! ! !

ベストアンサー1

sed -E '
   s/[0-9.+-]*e[-+]?[0-9]{2}/     &/g
   s/ *(.{22}[0-9])/\1/g' < input.txt > output.txt

これは、GNUまたはFreeBSD(またはOS / Xなどの派生バージョン)sedまたはsedUnix / POSIX標準(の場合-E)に準拠する次のバージョンを想定しています。

おすすめ記事