Chinaunix

标题: 怎么将字符串中的科学计数转化成数字 [打印本页]

作者: gooderpan    时间: 2015-12-23 15:32
标题: 怎么将字符串中的科学计数转化成数字
本帖最后由 gooderpan 于 2015-12-23 16:11 编辑

有一个文件file:(tab分隔)
chp    pos    ref   alle   rean1_2.0E-3    rean2_2.2E-3    rean3_3.0E-3    rean4_3.2E-2    rean5_3.5E-3    rean6_3.2E-2

想要得到的结果为:(tab分隔)
chp    pos    ref   alle   rean1_0.002    rean2_0.0022    rean3_0.003    rean4_0.032    rean5_0.0035    rean6_0.032

谢谢各位大神啦啦!请帮帮忙!
作者: jason680    时间: 2015-12-23 16:01
回复 1# gooderpan

$ awk 'BEGIN{FS=OFS="\t"}{for(n=1;n<=NF;n++){if(match($n,"(.+_)([0-9.]+E[+-]*[0-9]+)",a))$n=a[1]""a[2]+0}}1' FILE
chp        pos        ref        alle        rean1_0.002        rean2_0.0022        rean3_0.003        rean4_0.032        rean5_0.0035        rean6_0.032

   
作者: gooderpan    时间: 2015-12-23 16:20
本帖最后由 gooderpan 于 2015-12-23 16:20 编辑

大神,我运行报错哦!显示:awk: syntax error at source line 1
context is
         >>> BEGIN{FS=OFS="\t"}{for(n=1;n<=NF;n++){if(match($n,"(.+_)([0-9.]+E[+-]*[0-9]+)", <<<
awk: illegal statement at source line 1
awk: illegal statement at source line 1回复 2# jason680


   
作者: haooooaaa    时间: 2015-12-23 16:31
  1. awk '{for(i=4;++i<=NF;){split($i,t,/_|E/);$i=sprintf("%s_%s",t[1],t[2]*10^t[3])}}1' b
  2. chp pos ref alle rean1_0.002 rean2_0.0022 rean3_0.003 rean4_0.032 rean5_0.0035 rean6_0.032
复制代码

作者: yjh777    时间: 2015-12-23 20:33
you can use strtonum() convert it

awk '{for(i=1;i<=NF;i++) { if ($i ~ /_/) {split($i,t,/_/); $i=sprintf("%s_%s",t[1],strtonum(t[2]))} }} 1'




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2