【问题标题】:Calculating statistics directly from a CSV file直接从 CSV 文件计算统计数据
【发布时间】:2011-02-08 23:31:26
【问题描述】:

我有一个 CSV 格式的事务日志文件,我想用它来运行统计信息。日志有以下字段:

日期:时间/日期戳 销售人员:完成销售的人的用户名 促销:促销中的商品总和。 金额:销售总额

我想获得以下统计数据:

销售人员:正在分析的销售人员的用户名。 minAmount:此销售人员交易的最小总计。 avgAmount:平均总计.. maxAmount:最大的总计.. minPromo:销售人员的最小促销金额。 avgPromo:平均促销金额...

我很想构建一个数据库结构、导入这个文件、编写 SQL 并提取统计信息。除了这些统计数据之外,我不需要这些数据中的任何其他内容。有没有更简单的方法?我希望一些 bash 脚本可以让这变得简单。

【问题讨论】:

  • 您遇到问题的哪一部分?统计数据本身?数据结构?解析?对于您熟悉的任何脚本语言来说,这似乎都不是一个非常困难的问题。
  • 拥抱 PowerShell ...

标签: bash csv


【解决方案1】:

TxtSushi 这样做:

tssql -table trans transactions.csv \
'选择
    销售员,
    min(as_real(amount)) 作为 minAmount,
    avg(as_real(amount)) 作为 avgAmount,
    max(as_real(amount)) 作为 maxAmount,
    min(as_real(promo)) 作为 minPromo,
    avg(as_real(promo)) as avgPromo
来自反式
按销售人员分组'

我有一堆example scripts 展示如何使用它。

编辑:固定语法

【讨论】:

  • +1 这看起来容易多了。下次我得试一试。顺便说一句:你是土豚吗?
  • 这就是我所害怕的......我希望你的主人不会因为让你在家(如果你在美国)而受到打击。我听说你们“特别聪明”,但是,哇,回答 SO 实在是太过分了。那么,是糖让你如此聪明吗?
【解决方案2】:

也可以使用 awk 脚本来执行此操作。它只是带有一些变量的 CSV。

【讨论】:

  • Awk 很自然 - 甚至有开始/结束,因此您可以初始化然后轻松计算平均值
  • 非常有趣。如何使用 awk 进行“GROUP BY salesperson”?
  • @User1:使用关联数组或asort()asorti()
  • 完成。这比构建数据库要容易得多。增强我的 awk 技能绝对值得!
【解决方案3】:

您可以遍历 CSV 中的行并使用 bash 脚本变量来保存您的最小/最大金额。对于平均值,只需保留一个运行总数,然后除以总行数(不计算可能的标题)。

这里有一些 useful snippets 用于在 bash 中处理 CSV 文件。

如果您的数据可能被引用(例如,因为字段包含逗号),则使用 bash、sed 等进行处理会变得更加复杂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 2023-03-22
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多