忽略某些特定字符的Diff

2024-09-27 00:18:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个巨大的文本文件(大小从1到5gb),我必须使用shell命令计算它们之间的差异。 问题是,对于这些文件的每一行,我必须忽略某些特定位置的字符。在

第一次我使用diff,从两个文件中删除了我必须忽略的内容:

diff<;(cut-b1-58,69-FILE1.TXT)<;(cut-b1-58,69-FILE2.TXT)>;输出.TXT

但问题是输出文件不包含剪切字符。在

示例


文件1:

0123456311020130123456

AAAAA A31102013AAAAA

BBBBBBB 31102013BBBBBBB


文件2:

0123456310920130123456

1111111 3109201311111

AAAAA B31092013AAAAAB公司

bbbbbbb 31092013bbbbbbb


diff必须忽略每行的8到15个字符,并在输出中返回新行:


输出:

1111111 3109201311111

AAAAA B31092013AAAAAB公司


有人能帮我吗?在

非常感谢, 弗朗西斯科


Tags: 文件命令lttxt内容diff公司差异
2条回答

diff可能不是合适的工具,因为您只对比较每一行的部分内容感兴趣,只希望从第二个文件输出。您需要编写自己的比较脚本,因为您只对每个文件中对应行之间的差异感兴趣,所以比较容易。Python中的一个示例:

with open("FILE1.TXT", "r") as f1:
    with open("FILE2.TXT", "r") as f2:
        for line1, line2 in zip(f1, f2):
            if (line1[:57] != line2[:57] or
                line1[68:] != line2[68:]):
                print line2

多亏了python的提示,我做到了:

            file1 = open("FILE1.TXT", "r")
            a={}
            for line1 in file1:
                str = line1[:59] + line1[68:-1]
                a[str] = 1
            file1.close()

            file2 = open("FILE2.TXT", "r")
            out = open("OUTPUT.TXT", "w")
            for line2 in file2:
                str = line2[:59] + line2[68:-1]
                if not a.has_key(str):
                    out.write(line2[:-1])
            out.close()
            file2.close()

对于两个大文件(2.8GB),大约需要20秒。在

谢谢大家!在

相关问题 更多 >

    热门问题