0

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

...
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 不起作用,因为行 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 找到不同的行。

4

0 回答 0