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
任何人都可以引导我找到更理想的解决方案吗
答案 0 :(得分:0)
为安全起见,我将在awk中执行以下操作:
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