如何移除文件中末尾三位字符重复的冗余行?
移除文件中末尾三位字符重复的行
需求说明
给定文件file.txt,需要移除所有末尾三位字符与之前行重复的行,只保留首次出现该末尾三位的行。比如示例输入:
aabbccj biukghk hgkfhff hsgfccj jflgsfs fskfyhd bfsbkhd fjlfghk
期望输出:
aabbccj biukghk hgkfhff jflgsfs fskfyhd bfsbkhd
(注:hsgfccj末尾三位是ccj,和第一行aabbccj重复;fjlfghk末尾三位是ghk,和第二行biukghk重复,所以这两行被移除)
Python 实现脚本
你可以用以下Python脚本处理文件,它会读取原文件,筛选符合要求的行并输出到新文件(或覆盖原文件,注意备份):
seen_endings = set() output_lines = [] with open('file.txt', 'r') as f: for line in f: # 去除行尾换行符,保留原始行的前导/尾随空格 stripped_line = line.rstrip('\n') # 提取末尾3个字符(如果行长度不足3,直接保留) ending = stripped_line[-3:] if len(stripped_line) >=3 else stripped_line if ending not in seen_endings: seen_endings.add(ending) output_lines.append(stripped_line) # 将结果写入新文件(替换'output.txt'为'file.txt'可直接覆盖原文件,建议先备份) with open('output.txt', 'w') as f: f.write('\n'.join(output_lines) + '\n')
脚本说明
- 用
seen_endings集合记录已出现的末尾字符组合,保证查询效率 - 遍历每行时保留原始格式(除自动换行符),不破坏原有空格
- 长度不足3的行直接以整行作为标识,避免误删
- 结果写入新文件,防止直接修改原文件导致数据丢失
命令行工具实现(awk)
如果习惯用命令行,也可以用awk一行搞定:
awk '{ending=substr($0, length($0)-2); if (!seen[ending]++) print $0}' file.txt > output.txt
substr($0, length($0)-2)提取每行末尾3个字符(awk下标从1开始)seen[ending]++记录末尾组合的出现次数,首次出现时执行打印
内容的提问来源于stack exchange,提问作者Ahana Kk
相关产品推荐
相关产品推荐

