python - 从 txt 文件中删除重复的行

标签 python linux awk

我正在处理包含以行分隔的数据的大型文本文件 (~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 命令行工具。

谢谢。

最佳答案

下面的(在 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 sort(即 disk-based)将排序作为预处理步骤进行,并更改脚本,使其不再读取整个文件到内存中。

关于python - 从 txt 文件中删除重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4948509/

相关文章:

python - 在 Python 中使用 map 函数迭代字典列表中的值

python - 将高斯和洛伦兹拟合到Python中的数据

python - 索引错误 : too many indices

c++ - 如何在 Linux 中的 C++ 中获取精确到毫秒的日期和时间字符串?

python - 使用 Python 读取 RTF 文件时出现欧元符号问题

c - 段错误 - 如何从管道写入和读取链表

c - 用C中的信号灯和信号同步过程

linux - 用基于匹配组的评估字符串替换字符串(优雅的方式,不使用 for .. in)

awk - ORS 拒绝将输出记录分隔到新行

linux - 使用 Awk 根据给定的表情符号显示特定行?