需要在perl中转置大型csv文件
csv数据文件总共是3.2GB,天知道有多少行和列(假设非常大)。该文件是一个基因组学数据,包含个体群体的SNP数据。因此,csv文件包含ID(如需要在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),所以特别欢迎详细的解释 将任务分解为几个步骤以节省内存 读取一行并将字段写
TD102230
)和遗传数据(如A/A
和A/T
)
现在,我使用了
Text::CSV
和Array::Transpose
模块,但似乎无法正确使用(就像在计算集群中冻结一样)。有没有具体的模块可以做到这一点?我是Perl新手(在低级编程方面没有太多经验,以前主要使用R和MATLAB),所以特别欢迎详细的解释 将任务分解为几个步骤以节省内存
作为直接的回答,您应该逐行读取文件,使用
Text::CSV
处理它们,将新值推送到数组中,每个数组对应于原始列,然后使用join
输出它们,或者获得原始列的转置表示。在join
之后立即处理每个数组也将有助于解决内存问题
另一种解决内存需求的方法是将值写入外部文件而不是数组,并将它们与操作系统设施连接起来
你也应该想想你为什么需要这个。难道真的没有更好的方法来解决手头的实际任务吗,因为仅仅转置本身并没有真正的用途吗?转置不应该使用
cat
而不是paste
?这取决于选择源文件的纵坐标还是横坐标作为主轴。我测试了我的解决方案,它更容易编程,而且保证只需要输入一次。试图立即加载文件,计算机对我的惩罚相当严厉。我正在使用另一个程序,该程序以一种格式获取数据,但我拥有的原始数据是转置,这就是我试图翻转数据的原因。