このタスクには助けが必要です。サンプルデータが次のようになっているときに、2 つのファイルがあるとします。
...
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、2 番目の行に M がありますが、たとえば BBM や B、または Z の後にいくつかの変数を指定することもできます。私がしなければならないことは、B や M など、1 種類の開始文字だけを見た場合に異なる最初の行を見つけることです。次に、ループ番号を出力する必要があります。私は私ができることを知っています
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
この場合、行 N が t で異なるため、cmp を実行しても機能しません。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 を使用して異なる行を見つけることができません。