我正在处理大型文本文件(~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注意。最后的顺序无关紧要。
做这件事的有效方法是什么?
我可以使用awk、python或任何标准的linux命令行工具。
谢谢。
不管有额外位的线的位置如何,对glenn jackman答案的这种变化都应该有效:
或者
awk '{x[$1 " " $2 " " $3] = $0} END {for (y in x) print x[y]}'
如果需要指定不同文件的列数:
下面(用Python)如何:
如果发现内存使用有问题,可以使用Unix
sort
(即disk-based)作为预处理步骤进行排序,并更改脚本,使其不会将整个文件读入内存。相关问题 更多 >
编程相关推荐