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

是否按第一列的内容拆分csv文件而不创建副本?,csv,awk,split,copy,Csv,Awk,Split,Copy,我正在尝试完成类似于此线程中描述的内容: 在那里,最好的解决方案似乎是使用awk来完成这项工作。但是,我正在处理大量的csv文件,我希望在不创建新副本的情况下分割该文件,因为磁盘I/O速度快得要命。有没有一种方法可以在不创建新副本的情况下拆分原始文件?我不太确定你在问什么,但如果你的问题是:“我可以在磁盘上拆分一个大文件,然后“就地”拆分,这样我就可以得到许多小文件,而不必将这些小文件写入磁盘?”那么答案是否定的 您将需要迭代第一个文件,并将“段”作为新文件写回磁盘,而不管您是使用awk、Pyt

我正在尝试完成类似于此线程中描述的内容:


在那里,最好的解决方案似乎是使用awk来完成这项工作。但是,我正在处理大量的csv文件,我希望在不创建新副本的情况下分割该文件,因为磁盘I/O速度快得要命。有没有一种方法可以在不创建新副本的情况下拆分原始文件?

我不太确定你在问什么,但如果你的问题是:“我可以在磁盘上拆分一个大文件,然后“就地”拆分,这样我就可以得到许多小文件,而不必将这些小文件写入磁盘?”那么答案是否定的


您将需要迭代第一个文件,并将“段”作为新文件写回磁盘,而不管您是使用awk、Python还是文本编辑器。不过,您不需要事先制作第一个文件的副本

我不太清楚你在问什么,但如果你的问题是:“我能把一个巨大的文件放在磁盘上,并将其“就地”拆分,这样我就可以得到许多较小的文件,而不必将这些较小的文件写入磁盘吗?”,那么答案是否定的

您将需要迭代第一个文件,并将“段”作为新文件写回磁盘,而不管您是使用awk、Python还是文本编辑器。不过,您不需要事先制作第一个文件的副本

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

但是,您当然可以减少I/O绑定进程对系统的影响。一些显而易见的解决办法是:

  • 使用RAM磁盘减少磁盘I/O
  • 使用SAN磁盘减少本地磁盘I/O
  • 使用I/O调度程序限制磁盘I/O的速率。例如,大多数Linux系统支持ionice实用程序
  • 将文件分块并使用批处理队列以减少CPU负载
  • 使用nice可以减少文件处理期间的CPU负载
  • 如果你在处理文件,那么你就是在处理I/O。这取决于你如何在系统限制内充分利用它。

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

    但是,您当然可以减少I/O绑定进程对系统的影响。一些显而易见的解决办法是:

  • 使用RAM磁盘减少磁盘I/O
  • 使用SAN磁盘减少本地磁盘I/O
  • 使用I/O调度程序限制磁盘I/O的速率。例如,大多数Linux系统支持ionice实用程序
  • 将文件分块并使用批处理队列以减少CPU负载
  • 使用nice可以减少文件处理期间的CPU负载

  • 如果你在处理文件,那么你就是在处理I/O。这取决于你如何在系统约束中充分利用它。

    你只想有一个新文件,其中只包含monster.txt中的第一列数据?不,我想根据第一列的值将原始文件拆分成更小的文件。可以假定第一列已排序。但是,我希望使用尽可能少的i/O来实现这一点,因此希望尝试在磁盘上适当地拆分巨大的文件。使用RAM磁盘,或者使用调度实用程序(如ionice)减少i/O(如果您的平台提供)。您只想拥有一个新文件,其中只包含monster.txt中的第1列数据?不,我想根据第一列的值将原始文件拆分为更小的文件。可以假定第一列已排序。但是,我希望使用尽可能少的i/O来实现这一点,因此希望尝试在磁盘上就地拆分巨大的文件。使用RAM磁盘,或者使用调度实用程序(如ionice)减少i/O,如果您的平台提供的话。这是不幸的,我真的希望能够在不必将所有数据重新写入磁盘的情况下将其拆分到位。不幸的是,我真的希望能够在不必将所有数据重新写入磁盘的情况下将其拆分到位。