我有一个较大的 .gz 文件(2.1G),我想要将它加载到 R 中,但是文件太大了,我必须将其分成几个部分,并在重新组合之前逐个加载每个部分。然而,我在分割文件时遇到了困难,因为我无法保留数据结构。该文件本身除了前两行外,是一个 56318 x 9592 的矩阵,其中包含非同质条目。
我使用的是 Ubuntu 16.04。首先,我尝试使用终端中的 split 命令,如此链接所建议的 (https://askubuntu.com/questions/54579/how-to-split-larger-files-into-smaller-parts?rq=1)。
这样做会创建比我预期更多的文件(因为我的矩阵有57000行,我希望输出6个文件,每个文件大小为10000行)。当我读取其中一个文件并调查其维度时,我看到每个文件都是一个62x9592的矩阵,表明所有列都被保留,但我得到的行数远少于我所希望的。此外,在读取时,我遇到了一个指定文件结尾意外的错误。我的想法是它没有按照我想要的方式读入。
我在这里找到了两个可能的替代方案-https://superuser.com/questions/381394/unix-split-a-huge-gz-file-by-line 特别地,我尝试使用gunzip传递不同的参数,并将输出传递给split(假设压缩文件是导致不一致行尾的原因)。我尝试了:
但是,我按照这种方法最终得到的分割结果与之前完全相同。我在将“zcat”替换为“gunzip -c”时也遇到了同样的问题,应该是将未压缩的输出发送到了分割命令。
该链接上的另一个答案建议使用类似于zcat的head或tail进行流式处理。
我使用的是 Ubuntu 16.04。首先,我尝试使用终端中的 split 命令,如此链接所建议的 (https://askubuntu.com/questions/54579/how-to-split-larger-files-into-smaller-parts?rq=1)。
$ split --lines=10000 "originalFile.gct.gz" "originalFile.gct.gz.part-"
这样做会创建比我预期更多的文件(因为我的矩阵有57000行,我希望输出6个文件,每个文件大小为10000行)。当我读取其中一个文件并调查其维度时,我看到每个文件都是一个62x9592的矩阵,表明所有列都被保留,但我得到的行数远少于我所希望的。此外,在读取时,我遇到了一个指定文件结尾意外的错误。我的想法是它没有按照我想要的方式读入。
我在这里找到了两个可能的替代方案-https://superuser.com/questions/381394/unix-split-a-huge-gz-file-by-line 特别地,我尝试使用gunzip传递不同的参数,并将输出传递给split(假设压缩文件是导致不一致行尾的原因)。我尝试了:
$ zcat originalFile.gct.gz | split -l 10000 "originalFile.gct.gz" "originalFile.gct.gz.part-"
但是,我按照这种方法最终得到的分割结果与之前完全相同。我在将“zcat”替换为“gunzip -c”时也遇到了同样的问题,应该是将未压缩的输出发送到了分割命令。
该链接上的另一个答案建议使用类似于zcat的head或tail进行流式处理。
$ zcat originalFile.gct.gz | head -n 10000 >> "originalFile.gct.gz.1"
使用zcat命令,这个效果非常完美,正是我想要的。输出结果的维度为10000x9592,因此这是最理想的解决方案。需要注意的一点是,此输出结果是一个ASCII文本文件而不是压缩文件,但我完全可以接受。
然而,我希望能够将文件分割成10000行一组,并生成另外的输出文件。对于这种特殊情况,手动创建6个输出文件不是很麻烦,但我有数十个类似的文件,其中一些文件的大小超过10gb。因此我的问题是,如何使用split命令来分割未压缩的文件的前10000行并输出它们,自动更新后缀以生成新文件?基本上,我想要从"head"命令得到的输出结果,但使用"split"命令可以在整个文件上执行。