我正在处理包含由行分隔的数据的大型文本文件(~20MB).
大多数数据条目是重复的,我想删除这些重复只保留一个副本.
此外,为了使问题稍微复杂一些,重复一些条目并附加额外的信息.在这种情况下,我需要保留包含额外信息的条目并删除旧版本.
例如
我需要离开这个:
BOB 123 1DB JIM 456 3DB AX DAVE 789 1DB BOB 123 1DB JIM 456 3DB AX DAVE 789 1DB BOB 123 1DB EXTRA BITS
对此:
JIM 456 3DB AX DAVE 789 1DB BOB 123 1DB EXTRA BITS
NB.最后的订单无关紧要.
有效的方法是什么?
我可以使用awk,python或任何标准的linux命令行工具.
谢谢.
最佳答案
如何(在Python中):
prev = None
for line in sorted(open('file')):
line = line.strip()
if prev is not None and not line.startswith(prev):
print prev
prev = line
if prev is not None:
print prev
如果您发现内存使用存在问题,可以使用Unix排序(即disk-based)将排序作为预处理步骤进行排序,并更改脚本以使其不会将整个文件读入内存.