如何在文件中添加加号

时间:2013-06-19 10:26:22

标签: awk

我有一个类似下面的文件

 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 个答案:

答案 0 :(得分: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.000000 e + 00 + 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.888935 e + 01 -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-01 +5.140000 e + 00 + 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

答案 1 :(得分: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

答案 2 :(得分:2)

+添加到第一列:

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

+添加到所有列:

awk '{for(i=1;i<=NF;i++)$i=$i>0?"+"$i:$i}1' file

答案 3 :(得分: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