根据大文件中的模式找出差异

时间:2013-11-05 01:26:00

标签: unix grep large-files cmp

我需要一些帮助来完成这项任务: 假设我们有两个文件,而样本数据如下:

...
N n=43222312 t=1
B a=21321 b=123123 c=213213
M a=12312 d=123

N n=43222313 t=3
M a=17712 d=121233

每个N都是一个循环数。输出变化,这里我们有第一行的B和M,第二行的M,但我们可以有BBM或B,或者甚至Z后跟一些变量。 我需要做的是找到第一行,如果我们只查看一种起始字母,例如B或M.那么我需要输出循环数。 我知道我能做到

grep -w "N|B" <file1 >output1   
grep -w "N|B" <file2 >output2
cmp file1 file2
/* loop backwards to extract the n number */

如果用N表示的行对于两个文件都相同,这将正常工作。然而,事实并非如此,这就是为什么我在这里寻求帮助......想不到一个聪明的方法去做。此外,该文件的大小为800MB +所以循环文件不是一个选项... 谢谢!

示例输入f1:

...
N n=43222312 t=1
B a=21321 b=123123 c=213213
M a=12312 d=123
...
N n=43222319 t=3
M a=17712 d=121233

示例输入f2:

...
N n=43222312 t=1
B a=21321 b=123123 c=000000
M a=12312 d=123
...
N n=43222319 t=2
M a=17712 d=00000

输出:

n=43222312 for case where B differs
n=43222319 for case where M differs
在这种情况下执行cmp是不行的,因为t cmp中的行N不同,将为我输出这一行,而不是B或M中的差异。并且行N的差异(这里t = 2和t = 3)并不意味着随后的B和M线会有差异。例如f3:

...
N n=43222312 t=1
B a=21321 b=123123 c=213213
M a=12312 d=00000
...
N n=43222319 t=2
M a=17712 d=121233

如果我将f1与此f3进行比较,我将无法使用cmp找到不同的行。

0 个答案:

没有答案