1

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

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

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

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

例子


文件1:

0123456311020130123456

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

bbbbbbb31102013bbbbbbb


文件2:

0123456310920130123456

1111111310920131111111

aaaaaaB31092013aaaaaaB

bbbbbbb31092013bbbbbbb


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


输出:

1111111310920131111111

aaaaaaB31092013aaaaaaB


有谁能够帮我?

非常感谢,弗朗切斯科

4

2 回答 2

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
于 2013-11-06T16:25:46.043 回答
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 秒。

谢谢各位!

于 2013-11-07T10:29:15.543 回答