Diff忽略一些特定的字符

时间:2013-11-06 15:35:54

标签: python shell unix diff cut

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

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

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

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

实施例


FILE1:

0123456311020130123456

aaaaaaA31102013aaaaaaA

bbbbbbb31102013bbbbbbb


FILE2:

0123456310920130123456

1111111310920131111111

aaaaaaB31092013aaaaaaB

bbbbbbb31092013bbbbbbb


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


输出:

1111111310920131111111

aaaaaaB31092013aaaaaaB


有人能帮助我吗?

非常感谢, 弗朗西斯

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

感谢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秒。

谢谢大家!