2012-08-06 11 views
-3

csv数据文件总共为3.2 GB,上帝知道有多少行和列(假设非常大)。该文件是针对个体群体的具有SNP数据的基因组学数据。因此,csv文件包含诸如TD102230之类的ID和遗传数据,例如A/AA/T需要转换perl中的大csv文件

现在我使用了Text::CSVArray::Transpose模块,但似乎无法正确(如在计算集群中冻结)。有没有特定的模块可以做到这一点?我是Perl新手(在低级编程方面没有太多经验,以前主要使用R和MATLAB),所以对这些详细的解释尤其欢迎!

+0

试图立即加载文件,电脑惩罚我相当苛刻。 – awacs 2012-08-06 17:26:40

回答

0

直接回答,你应该逐行读取文件中的行,处理他们Text::CSV,与join推和新的价值观,每个阵列阵列对应于原始列,然后只输出它们或希望得到原来的转置表示。在join之后处理每个阵列也将帮助解决记忆问题。

将值写入到外部文件而不是数组并将它们与OS设施结合是另一种解决内存需求的方法。

你也应该考虑为什么你需要这个。是否真的没有更好的方法来解决手头的真实任务,因为转移本身并没有真正的目的?

+0

我正在使用另一个程序,它采用一种格式的数据,但我的原始数据是转置,这就是为什么我试图翻转数据。 – awacs 2012-08-06 17:27:36

0

将任务分解为几个步骤来节省内存。

  1. 读取一行并将字段写入以行号命名的文件中。每场输出一行。
  2. 重复步骤1,直到输入CSV文件耗尽。
  3. 使用paste将所有输出文件合并为一个大文件。
+0

不应该'猫'而不是'粘贴'转置? – 2012-08-06 17:06:40

+0

这取决于是选择源文件的纵坐标还是横坐标作为主轴。我测试了我的解决方案更容易编程,并且保证只需要一次输入即可。 – daxim 2012-08-06 17:09:45

相关问题