如何转换 csv 来合并匹配的行?

如何转换 csv 来合并匹配的行?

我有一个包含一些交易数据的 CSV 文件。比如日期、交易量、价格和方向(卖/买)。此外,每笔交易都有一个 ID,每笔收盘交易(较新的交易)都有一个对相应交易的引用。经典的数据库引用。

现在我想做一些统计并绘制一些图表。这可以通过 Octave、LaTeX/TikZ、Gnuplot 或其他任何软件来完成。为此,我需要在一行中同时显示买入价和卖出价。我的想法是预处理 CSV 以获取另一个包含所需信息的 CSV,然后进行统计。最后,我希望有一个基于脚本而不是电子表格的解决方案,因为数据可能会经常更改(从在线数据库导出)。

我的实际解决方案(参见http://paste.ubuntu.com/6262822/) 是一个 bash 脚本,它逐行解析 CSV 并检查是否存在相应的交易。如果找到,则将新行写入目标 CSV。如果没有,则会打印警告。

坏消息是:对于源文件中的每一行,我都必须多次读取整个文件。这会导致 300 行代码的运行时间长达 10 秒。由于行数可能很快增加(>10k 行),因此这并不完美。我知道,脚本中需要打开许多 shell,这可能会导致性能问题。

现在我的问题是:

  • bash/awk/sed/... 是做事的好方法吗?
  • 我是否应该先将所有数据导入“真实”本地数据库才能使用 SQL?
  • 是否有简单的方法可以达到预期的结果?

答案1

事实上,我通过使用 PostgreSQL(笔记本电脑上已有)解决了这个问题。我将数据添加\copy到临时表中,并进行了一些查看、选择等。最后,所有操作(加载数据、创建多个输出文件和数据透视表)只需不到半秒钟。完美。

谢谢。

相关内容