<分区>
我有一个包含 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....
如您所见,某些字段具有科学记数法的值(考虑到 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