綾小路龍之介の素人思考

[GNU] 2 つのファイルに含まれる同一行を抽出

diff は違う行を表示してくれるけど、同じ行を表示したいケースが有る。

grep を使うと以下のようになる。つまり、pattern-file.txt に含まれる各行をパターンとして、target-file.txt からパターンにマッチする行を抽出する。パターンマッチは行ごとに行われるので、target-file.txt に含まれる行順が保存される。

$ grep --fixed-strings --line-regexp --file=pattern-file.txt target-file.txt

以下のようなファイルを適用させた場合、

$ cat pattern-file.txt
Alice
Bob
Charlie
Dave
$ cat target-file.txt
Alice
ボブ
Dave
Dave

以下のような結果になる。

$ diff pattern-file.txt target-file.txt
2,3c2,3
< Bob
< Charlie
---
> ボブ
> Dave
$ grep --fixed-strings --line-regexp --file=pattern-file.txt target-file.txt
Alice
Dave
Dave

diff 出力の反転ということを考えると、diff が違いのある行だとしている 2 行目と 3 行目以外 (1 行目と4 行目) を表示してほしいのだけれど、3 行目も表示されている。diff 出力の反転をきたいするなら、grep を使う解決策はあまり適切ではないかもしれない。

リファレンス

  1. GNU Grep 2.26
  2. アリスとボブ - Wikipedia

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2007-11-18T16:10:41+09:00
  2. Modified: 2007-11-18T16:10:41+09:00
  3. Generated: 2019-09-06T23:09:28+09:00