我正在寻找一个命令行工具来计算 CSV 文件中指定列的值的总和。(更新:CSV 文件可能包含带引号的字段,因此仅在分隔符(',')处断开的简单解决方案不起作用。)
给出以下示例 CSV 文件:
description A,description B,data 1, data 2
fruit,"banana,apple",3,17
veggie,cauliflower,7,18
animal,"fish,meat",9,22
例如,我想要对结果data 1
为19 的列进行求和。
我曾尝试使用csvkit来实现这一点,但收效甚微。还有其他专门用于此 CSV 操作的命令行工具吗?
Miller 本身可以处理引用的 CSV,因此以下内容应该有效:
我将您的 CSV 放入文件 a.csv 中,并进行了如下总结:
这是使用 awk 以逗号作为字段分隔符。如果字段 #3 与数据*不匹配,我们将该值添加到总计中。完成后,打印出“sum=”和总值。这是处理表格数据awk 答案的子集。
使用 FPAT 允许引用的更新版本:
FPAT 是 gawk 的正则表达式(不适用于旧式 awk),用于指定字段的定义方式。在本例中,有两个正则表达式,
([^,]*)
表示零个或多个非逗号字符的出现次数。("[\"]+")
表示一个或多个非引号字符的出现次数,包含在引号内。使用
csvsql
csvkit 工具集,这是您最初尝试使用的工具:这会将 CSV 数据插入
file
到同名的数据库表中,无需类型推断 (-I
)。然后,它会在该表上应用 SQL 语句SUM("table 1")
来获取字段的总和table 1
。由于输出将包含标题,我们通过调用将其删除
tail
。