用awk替换匹配模式的字段

时间:2018-04-10 18:03:14

标签: awk

我有一个看起来像这样的文件:

7846 1 8.89279e-05 0.094563 0.760024 1 0 0 0 0 0
6843 6 0.0170262 1.44256e-05 0.903887 2 -7 -8 0 0 -12.3666
4583 1 0.929271 0.586333 5.99739e-05 0 0 0 0 0 0

我希望将3美元,4美元和5美元的科学记数法转换为零。

7846 1 0.000000 0.094563 0.760024 1 0 0 0 0 0
6843 6 0.0170262 0.000000 0.903887 2 -7 -8 0 0 -12.3666
4583 1 0.929271 0.586333 0.000000 0 0 0 0 0 0

我是awk的新手,但我知道我可以匹配指定模式的字段,如下所示:

awk '$3 ~ /e-0/' test.dat

但我不知道如何更换这个领域。

谢谢,知道这是一个简单的问题,但我找不到答案。

1 个答案:

答案 0 :(得分:0)

关注awk可能对您有帮助。

awk '{for(i=1;i<=NF;i++){if($i ~ /[0-9]+e/){match($i,/[^.]*/);val=RLENGTH;match($i,/\.[^e]*/);$i=sprintf("%0"val"d.%0"RLENGTH"d",$i,$i)}}} 1'   Input_file

OR

awk '
{
  for(i=1;i<=NF;i++){
    if($i ~ /[0-9]+e/){
       match($i,/[^.]*/);
       val=RLENGTH;
       match($i,/\.[^e]*/);
       $i=sprintf("%0"val"d.%0"RLENGTH"d",$i,$i)}}
}
1'   Input_file