如何根据某些条件合并两个大文件?

时间:2018-11-12 06:18:22

标签: algorithm file

我有两个文件,它们的大小超过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。有什么好的解决方法吗?

1 个答案:

答案 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)