按第一列的内容拆分csv文件而不创建副本?

时间:2012-06-20 13:27:07

标签: csv awk split copy

我正在尝试完成类似于此主题中描述的内容:How to split a huge csv file based on content of first column?

在那里,最好的解决方案似乎是使用awk来完成这项工作。但是,我正在处理非常大量的csv文件,我想分割文件而不创建新的副本,因为磁盘I / O速度正在扼杀我。有没有办法在不创建新副本的情况下拆分原始文件?

2 个答案:

答案 0 :(得分:3)

我不确定你在问什么,但是如果你的问题是:“我可以把一个巨大的文件存放在磁盘上并将其”就地“拆分,这样我就可以获得许多较小的文件而无需编写那些文件较小的文件到磁盘?“,那么答案是否定的。

您将需要遍历第一个文件并将“segment”作为新文件写回磁盘,无论您是使用awk,Python还是文本编辑器。但是,您不需要事先制作第一个文件的副本。

答案 1 :(得分:0)

“拆分文件”仍然需要RAM和磁盘I / O.没有办法解决这个问题;这就是世界的运作方式。

但是,您当然可以减少系统上I / O绑定进程的影响。一些明显的解决方案是:

  1. 使用RAM磁盘减少磁盘I / O.
  2. 使用SAN磁盘减少本地磁盘I / O.
  3. 使用I / O调度程序对磁盘I / O进行速率限制。例如,大多数Linux系统都支持 ionice 实用程序。
  4. 对文件进行分块并使用批处理队列来减少CPU负载。
  5. 使用 nice 减少文件处理期间的CPU负载。
  6. 如果您正在处理文件,那么您正在处理I / O.您可以在系统限制范围内充分利用它。