我需要一些帮助来完成这项任务:假设我们有两个文件,而样本数据如下:
...
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 找到不同的行。