Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要在perl中转置大型csv文件_Perl_Csv_Large Files_Transpose - Fatal编程技术网

需要在perl中转置大型csv文件

需要在perl中转置大型csv文件,perl,csv,large-files,transpose,Perl,Csv,Large Files,Transpose,csv数据文件总共是3.2GB,天知道有多少行和列(假设非常大)。该文件是一个基因组学数据,包含个体群体的SNP数据。因此,csv文件包含ID(如TD102230)和遗传数据(如A/A和A/T) 现在,我使用了Text::CSV和Array::Transpose模块,但似乎无法正确使用(就像在计算集群中冻结一样)。有没有具体的模块可以做到这一点?我是Perl新手(在低级编程方面没有太多经验,以前主要使用R和MATLAB),所以特别欢迎详细的解释 将任务分解为几个步骤以节省内存 读取一行并将字段写

csv数据文件总共是3.2GB,天知道有多少行和列(假设非常大)。该文件是一个基因组学数据,包含个体群体的SNP数据。因此,csv文件包含ID(如
TD102230
)和遗传数据(如
A/A
A/T


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

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

  • 读取一行并将字段写入以行号命名的文件中。每个字段输出一行
  • 重复步骤1,直到输入CSV文件用尽
  • 用于将所有输出文件合并为一个大文件

  • 作为直接的回答,您应该逐行读取文件,使用
    Text::CSV
    处理它们,将新值推送到数组中,每个数组对应于原始列,然后使用
    join
    输出它们,或者获得原始列的转置表示。在
    join
    之后立即处理每个数组也将有助于解决内存问题

    另一种解决内存需求的方法是将值写入外部文件而不是数组,并将它们与操作系统设施连接起来


    你也应该想想你为什么需要这个。难道真的没有更好的方法来解决手头的实际任务吗,因为仅仅转置本身并没有真正的用途吗?

    转置不应该使用
    cat
    而不是
    paste
    ?这取决于选择源文件的纵坐标还是横坐标作为主轴。我测试了我的解决方案,它更容易编程,而且保证只需要输入一次。试图立即加载文件,计算机对我的惩罚相当严厉。我正在使用另一个程序,该程序以一种格式获取数据,但我拥有的原始数据是转置,这就是我试图翻转数据的原因。