【发布时间】:2016-01-18 14:08:54
【问题描述】:
我有很大的文本文件(从 5GB 到 35GB)。我想按列连接这些文件(或者更好的是我想合并它们)。所有文件都有一个标识符列,并且它们在此列中具有相同的条目,因此可以合并它们。文件如下所示:
文件 1(文件超过 1000 列,以制表符分隔):
ID col1 col2
ab1000025 1 2
ab1000053 2 3
ab1250223 3 1
文件 2:
ID col3 col4
ab1000025 2 2
ab1000053 2 1
ab1250223 3 1
我尝试了两种不同的方法:
我使用 Python 和 pandas 数据框。不幸的是,当文件作为 pd.dataframe 读入时,文件的大小会增加。我正在使用服务器,但机器仍然没有足够的 RAM。因为这个问题,我有了另一个想法……
-
我使用 bash sort 命令对文件进行了排序,然后想要合并它们。不幸的是,对我的文件进行排序时出现了问题。我遇到的问题是,排序命令不会以相同的方式对所有文件进行排序。真正的问题是这样的条目:
ab100005 ab1000050
排序后,我用 R 对标识符进行了校对。我只提取了标识符列,将其读入 R,然后比较了所有文件中的列,似乎它有时将 ab100005 排序在 ab1000050 之前,然后再排序。我不是 100% 确定这是否是将其提取或读取到 R 中的问题,但我猜不是因为我也证明了原始排序文件并且在同一位置(行号)是不同文件中的不同条目。这不应该。
我使用的排序命令是:
sort -t$'\t' -k1,1 -n file.txt
或
sort -t$'\t' -k1,1 -h file.txt
也许有人对合并文件有完全不同的想法(使用 bash、Python 或 R)。这也将是完美的。上面两个文件的期望输出是:
ID col1 col2 col3 col4
ab1000025 1 2 2 2
ab1000053 2 3 2 1
ab1250223 3 1 3 1
【问题讨论】:
-
所有文件是否具有相同的 ID(忽略您提到的填充问题),因此行数(行数)相同?
-
是的,它们的行数相同。