我有两个巨大的文本文件(大小从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
有人能帮助我吗?
非常感谢, 弗朗西斯
答案 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秒。
谢谢大家!