1

2 つの巨大なテキスト ファイル (サイズが 1 ~ 5 GB) があり、シェル コマンドを使用してそれらの違いを計算する必要があります。問題は、これらのファイルの各行で、特定の位置にあるいくつかの文字を無視しなければならないことです。

最初は diff を使用し、2 つのファイルから無視する必要があるものを切り取りました。

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

しかし問題は、出力ファイルにカット文字が含まれていないことです。


ファイル1:

0123456311020130123456

aaaaaaA31102013aaaaaaA

bbbbbbb31102013bbbbbbbb


ファイル 2:

0123456310920130123456

1111111310920131111111

aaaaaaB31092013aaaaaaB

bbbbbbb31092013bbbbbbbb


diff は各行の 8 から 15 までの文字を無視し、新しい行も出力に返す必要があります。


出力:

1111111310920131111111

aaaaaaB31092013aaaaaaB


誰でも私を助けることができますか?

どうもありがとう、フランチェスコ

4

2 に答える 2

0

diff各行の一部のみを比較することに関心があり、2 番目のファイルからの出力のみが必要なため、これにはおそらく適切なツールではありません。独自の比較スクリプトを作成する必要があります。これは、各ファイル内の対応する行の違いのみに関心があるため、より簡単になります。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 つの大きなファイル (2.8GB) の場合、約 20 秒かかります。

ありがとう!

于 2013-11-07T10:29:15.543 に答える