次のファイルがあります。
120E+00 360E+01 258E-09-784E+02
-847E+00-360E+01 242E-08 420E+05
14E+00 360E+01 254E+00 78E+02
-120E+00-254E-01-223E-09-786E-02
E+00、E+01、E-01などは科学的表記法を使用して^0、^1、^-1などを表します。
次の形式のファイルを取得したいと思います。
120E+00 360E+01 258E-09 -784E+02
-847E+00 -360E+01 242E-08 420E+05
14E+00 360E+01 254E+00 78E+02
-120E+00 -254E-01 -223E-09 -786E-02
科学的な表記や負の数自体を変更せずに、負の前にスペースを追加したいと思います。
また、負の数が行の最初(最初の列)の場合、2列から行の終わりまでスペースを追加したくありません。
私もawkを使いたいです。
私の説明が明確であることを願っています。
ありがとうございます!
ベストアンサー1
-
したがって、デフォルトでは、直前の文字が数字-
の場合は、各文字の前にスペースを追加する必要があります。そうすることもできますが、awk
ここでは実際には良い選択ではありません。これははるかに簡単ですsed
。
$ sed -E 's/([0-9])-/\1 -/g' file
120E+00 360E+01 258E-09 -784E+02
-847E+00 -360E+01 242E-08 420E+05
14E+00 360E+01 254E+00 78E+02
-120E+00 -254E-01 -223E-09 -786E-02
またはパール:
$ perl -pe 's/([0-9])-/\1 -/g' file
120E+00 360E+01 258E-09 -784E+02
-847E+00 -360E+01 242E-08 420E+05
14E+00 360E+01 254E+00 78E+02
-120E+00 -254E-01 -223E-09 -786E-02
上記の両方について元の-i
ファイルを印刷する代わりに変更するには、次のように追加します。
sed -i -E 's/([0-9])-/\1 -/g' file
perl -i -pe 's/([0-9])-/\1 -/g' file
awk
mawk
以下は、最新バージョンのGNUおよびその他のサポートされているバージョンawk
でこれを行う方法ですgensub
。エドモートン今は削除されたコメントでこのコンテンツを提供しています。
awk '{print gensub(/([0-9])-/,"\\1 -","g")}' file
GNU awk
()を使用すると、edt rawファイルをgawk
使用できます。-i inplace
gawk -i inplace '{print gensub(/([0-9])-/,"\\1 -","g")}' file