我有两个文件,它们的大小超过1 TB。每行是sapply(Identifier, function(x) unlist(strsplit(x, "\\."))[3])
NC.1.OA NC.1.OA.0 NC.1.OA.1 NC.1.OA.1.a NC.1.OA.1.b NC.1.OA.1.c
"OA" "OA" "OA" "OA" "OA" "OA"
NC.1.OA.2 NC.1.OA.2.0 NC.1.OA.3 NC.1.OA.4
"OA" "OA" "OA" "OA"
在一个文件中。每行在另一行中是id, name
。我要合并它们。结果文件的每个留置权都像id, age
。有什么好的解决方法吗?
答案 0 :(得分:4)
首先-考虑使用数据库-它们旨在完美地完成这种工作。
如果无法使用数据库方法,请使用id
键对数据文件进行排序。
关于对大文件进行排序,外部排序的一些主题-选择适合您需要的方法。
如果可能的话,请使用(我认为-高度优化)实用程序,例如GNU sort,该实用程序可以选择要比较的键
然后执行合并操作-以相等的ID形式从两个排序的文件中读取行,并写入结果字符串。如果id
少一些,请从相应文件中读取下一行,依此类推。伪代码:
while not EOF(fileA) and not EOF(fileB):
if lineA.id == lineB.id:
write(fileC, lineA.id, lineA.name, lineB.age)
lineA = readNext(fileA)
lineB = readNext(fileB)
else if lineA.id < lineB.id:
lineA = readNext(fileA)
else:
lineB = readNext(fileB)