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

Unix 根据大文件中的模式查找差异,unix,grep,large-files,cmp,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,那么我需要输出循环号。 我知道我

我需要一些帮助来完成此任务: 假设我们有两个文件,而示例数据如下:

...
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 */
示例输入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不起作用,因为行N在t中不同cmp将为我输出这一行,而不是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找到不同的行。

我可能对这个问题感到困惑,因此这里有一个更简单的版本:如果文件在以B开头的行中不同,我需要找到N N=之后的数字,然后是N=之后的另一个数字,其中文件在以N开头的行中不同。目标是比较两个数字之间的差异提取。再次感谢!请用示例输入、基于该输入的所需输出以及您当前的输出来说明您的问题,并简要说明其不适用于您的原因。祝你好运。请注意,这个网站是为编程问题,而不是为其他人为你写程序。如果将问题加载到数据库中,是否可以用SQL表示?您好,谢谢您的评论。首先,我从未处理过SQL,因此;这对我来说是个死胡同。。。我将编辑问题以显示所需的输入和输出。谢谢我曾想过将它们变灰,然后回头看同一行,但这行不通,因为该行可能不止一次出现。。。
...
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