file1をfile2のパターンとして使用し、その逆の場合、grepが他の結果を表示するのはなぜですか?

file1をfile2のパターンとして使用し、その逆の場合、grepが他の結果を表示するのはなぜですか?

を実行すると、grep -m 1 -Fnxvf file1 file2一部のファイルでは実行時とは異なる行番号が表示されますgrep -m 1 -Fnxvf file2 file1ファイル交換)。

なぜ?


ファイルを最小限の例に縮小しました。

ファイル1

Pp: 1        Id pezzo 193        posIn = { x = 132, y = 1432 }
Pp: 1        Id pezzo 193        posIn = { x = 136, y = 1432 }
Pp: 1        Id pezzo 193        posIn = { x = 84, y = 1436 }
Pp: 1        Id pezzo 193        posIn = { x = 88, y = 1436 }

ファイル2

Pp: 1        Id pezzo 193        posIn = { x = 132, y = 1432 }
Pp: 1        Id pezzo 193        posIn = { x = 84, y = 1436 }
Pp: 1        Id pezzo 193        posIn = { x = 88, y = 1436 }
Pp: 1        Id pezzo 193        posIn = { x = 92, y = 1436 }

私が得た結果は次のとおりです。

$ grep -m 1 -Fnaxvf file2 file1
2:Pp: 1      Id pezzo 193        posIn = { x = 136, y = 1432 }
$ grep -m 1 -Fnaxvf file1 file2
4:Pp: 1      Id pezzo 193        posIn = { x = 92, y = 1436 }

最初の結果は私が予想したものと正確に一致しますが、2番目のケースでは(通常はそうです)file2


長い説明

2つのファイル間の最初の違いを見つけて表示しようとしています。見せたいただ最初の違いとその違いが発生する場所です。

見つけました。これSO応答(答えに対する私のコメントを参照)はうまくいくようですが、いくつかのファイルでは上記の奇妙な動作が見つかりました。

ベストアンサー1

TLDR:grepがパターンを順番に使用することを保証することはできません。

次の内容を含む2つのファイルがあるとしましょう(1行に1文字ずつ、読みやすくするために折り畳みました)。

ファイル1

A B D E

そして

ファイル2

A B C D
  • ファイル1のグループ2(ABCD)から最初に除外された(-vを使用したため)、文字はEです。
  • ファイル2のセット1から除外される最初の文字はCです。

ファイルの比較は通常次のとおりです。

  • cmp file1 file2バイナリファイルの場合、diffに気にしない場合(cmp -s(自動)を使用することもできます)
  • diff file1 file2file1からfile2までの疑似sedコードを示します(diff file2 file1は非常に対称です)。
  • comm -123 file1 file2file1(-1) および file2(-2) に共通行(-3)を表示

おすすめ記事