将CSV科学计数法转换为UNIX中的数字

时间:2018-11-19 05:20:34

标签: csv unix awk sed

csv文件中包含以下数据:-

year,num_val
2008,4.31333E+16
2009,473538088A5031009
2010,4.31333E+16

我想对unix框中存在的上述csv文件转换科学计数法,我想要的结果如下:-

year,num_val
2008,43133300000000000
2009,473538088A5031009
2010,43133300000000000

我尝试使用awk进行相同的操作,但是我得到的部分数据如下:-

awk -F',' '{printf "%16.0f\n",$2}' file.csv

收到的结果:-

43133300000000000
        473538088
43133300000000000

任何人都可以引导我找到更理想的解决方案吗

1 个答案:

答案 0 :(得分:0)

为安全起见,我将在中执行以下操作:

awk 'BEGIN{FS=OFS=","}($2==$2+0){$2=sprintf("%16.0f",$2)}1' file

这将检查$2是否为数字,如果是,则将其转换。如果第二行中的字符串可以显示E,则仅检查该行是否包含E可能会失败。

更强大,如果您只想转换科学计数法,则可以执行以下操作:

awk 'BEGIN{FS=OFS=","}($2==$2+0)&&($2~/E|e/){$2=sprintf("%16.0f",$2)}1' file