3

我有一个像下面这样的文件

 5.0000000000E-02 5.0000000000E+00 4.1000000000E-01 -4.8481128146E+01
 1.5000000000E-01 5.0000000000E+00 4.1000000000E-01 -4.6562934242E+01
 2.5000000000E-01 5.0000000000E+00 4.1000000000E-01 -4.8195946988E+01
 3.5000000000E-01 5.0000000000E+00 4.1000000000E-01 -4.8049939917E+01
 4.5000000000E-01 5.0000000000E+00 4.1000000000E-01 -4.8889348587E+01
-4.5000000000E-01 5.1400000000E+00 4.1000000000E-01 -4.8057104326E+01
-3.5000000000E-01 5.1400000000E+00 4.1000000000E-01 -4.8283429276E+01
-2.5000000000E-01 5.1400000000E+00 4.1000000000E-01 -4.7437231831E+01
-1.5000000000E-01 5.1400000000E+00 4.1000000000E-01 -4.7385816584E+01
-5.0000000000E-02 5.1400000000E+00 4.1000000000E-01 -5.1062140749E+01

我希望所有正数(特别是第一列)都将在实际数字之前用 + 替换。有什么想法吗?

4

4 回答 4

3

使用:printf_%+e

$ awk '{for (i=1; i<NF; i++) printf("%+e ", $i)}' a

+5.000000e-02 +5.000000e+00 +4.100000e-01 -4.848113e+01 +1.500000e-01 +5.000000e+00 +4.100000e-01 -4.656293e+01 +2.500000e-01 +5.000000e +4.100000e-01 -4.819595e+01 +3.500000e-01 +5.000000e+00 +4.100000e-01 -4.804994e+01 +4.500000e-01 +5.000000e+00 +4.100000e-01 -4.888935e -4.500000e-01 +5.140000e+00 +4.100000e-01 -4.805710e+01 -3.500000e-01 +5.140000e+00 +4.100000e-01 -4.828343e+01 -2.500000e-00 +5.140000e +4.100000e-01 -4.743723e+01 -1.500000e-01 +5.140000e+00 +4.100000e-01 -4.738582e+01 -5.000000e-02 +5.140000e+00 +4.100000e-01

于 2013-06-19T10:30:06.667 回答
2

添加+到第一列:

awk '{$1=$1>0?"+"$1:$1}1' file

添加+到所有列:

awk '{for(i=1;i<=NF;i++)$i=$i>0?"+"$i:$i}1' file
于 2013-06-19T13:03:04.823 回答
2

使用 awk 检查第一列是否还没有以数字开头,如果是,则在其前面放一个+

awk '$1 ~ /^[0-9]/ {$1 = "+"$1}'1 file

对于将 + 放在所有列之前使用:

awk '{for (i=1; i<=NF; i++) {if ($i ~ /^[0-9]/) printf("+"); printf("%s ", $i);}
      print "";}' file
于 2013-06-19T10:30:23.450 回答
1

GNU sed

对于初始示例 ( 5.00..):

sed -r 's/(^|[^-])\b([0-9])\./\1+\2./g' file

.

对于带有 pos 前导空格的修订示例。第一列 (  5.00..) 中的数字:

sed -r 's/^\s([0-9]\.)/\+\1/;s/(\s)([0-9]\.)/\1+\2/g' file

.

..输出:

+5.0000000000E-02 +5.0000000000E+00 +4.1000000000E-01 -4.8481128146E+01
+1.5000000000E-01 +5.0000000000E+00 +4.1000000000E-01 -4.6562934242E+01
+2.5000000000E-01 +5.0000000000E+00 +4.1000000000E-01 -4.8195946988E+01
+3.5000000000E-01 +5.0000000000E+00 +4.1000000000E-01 -4.8049939917E+01
+4.5000000000E-01 +5.0000000000E+00 +4.1000000000E-01 -4.8889348587E+01
-4.5000000000E-01 +5.1400000000E+00 +4.1000000000E-01 -4.8057104326E+01
-3.5000000000E-01 +5.1400000000E+00 +4.1000000000E-01 -4.8283429276E+01
-2.5000000000E-01 +5.1400000000E+00 +4.1000000000E-01 -4.7437231831E+01
-1.5000000000E-01 +5.1400000000E+00 +4.1000000000E-01 -4.7385816584E+01
-5.0000000000E-02 +5.1400000000E+00 +4.1000000000E-01 -5.1062140749E+01
于 2013-06-19T13:02:50.823 回答