ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux-Excel和awk关于CSV总数存在异议

2019-12-09 01:51:19  阅读:194  来源: 互联网

标签:awk linux excel


我有一个CSV文件,总计有两种方式:一种使用Excel,另一种使用awk.这是我在Excel中的前8列的总计:

1) 2640502474.00
2) 1272849386284.00
3) 36785.00
4) 
5) 107.00
6) 239259.00
7) 0.00
8) 7418570893330.00

这是我的awk输出:

$cat /home/jason/import.csv | awk -F "\"*,\"*" '{s+=$1} END {printf("%01.2f\n", s)}'
2640502474.00
$cat /home/jason/import.csv | awk -F "\"*,\"*" '{s+=$2} END {printf("%01.2f\n", s)}'
1272849386284.00
$cat /home/jason/import.csv | awk -F "\"*,\"*" '{s+=$8} END {printf("%01.2f\n", s)}'
7411306364347.00

请注意1和2如何完全匹配,而8如何相差数百万.我假设Excel的总数是正确的,那么awk为什么以不同的方式处理此文件?

解决方法:

您可能在引号中使用逗号格式的数字. Excel将正确处理该数字作为单个字段.用于awk中字段分隔的正则表达式不会-根据该正则表达式,数字内部的逗号是有效的分隔符.尝试处理可选的嵌套转义是非常困难的(并且几乎没有用),就像使用正则表达式在csv中可能发生的那样.

比较以下内容以查看可能发生的情况:

$echo '"1","10","15","1,000","14"' | awk -F "\"*,\"*" '{print $4}'
1
$echo '"1","10","15","1,000","14"' | awk -F "\",\"" '{print $4}'
1,000

请注意,上面的第二个正则表达式在最后一个字段中仍带有尾随“”的问题,并且仅在所有字段均被一致引用的情况下才有效-它仅用于说明目的.

标签:awk,linux,excel
来源: https://codeday.me/bug/20191209/2095591.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有