为十进制我有150列,其中样品的下面::转换科学记数法中的csv
id,c1,c2,c3,c4,c5...
1,0,acc,123.4E+03,0,bdd,...
2,1.299E-05,bef,1.666E-08,23,ghh....
给出为u可以看到一些字段具有在科学记数法的值大的csv文件(其考虑到csv文件已超过50亿行),所有列都有科学记号中的值是未知的。
我需要将科学记数法中的值转换为其对应的小数形式。 我遇到了以下解决方案:Convert scientific notation to decimal in multiple fields并获得下面的代码:
#!/usr/bin/awk -f
BEGIN {
d = "[[:digit:]]"
OFS = FS = ","
}
{
delim = ""
for (i = 1; i <= NF; i++) {
if ($i ~ d "E+" d d d "$") {
printf "%s%.41f", delim, $i
}
else {
printf "%s%s", delim, $i
}
delim = OFS
}
printf "\n"
}
但上面的脚本是不是为我工作。上面的脚本按原样返回我的输入文件(对于E +值和E-值),无需转换。我对shell脚本相当陌生,有什么想法?
我执行脚本以这种形式:
chmod u+x awkscript.awk
./awkscript.awk inputfile.csv
如果因为重复而关闭,请至少将'CONVFMT'解决方案复制到上面链接的文章中。 –
csv从哪里来? Excel xlsx,数据库?也许你可以改变单元格格式或导出选项,避免数字格式。你甚至可能赢得额外的精度。 –