やりたいこと
以下のファイルAと
apple strawberry orange cherry grape
以下のファイルBがあった場合に
orange pineapple banana strawberry
ファイルAの中でファイルBの中に存在しないものを差分として以下のように出力する。
apple cherry grape
環境情報
$ grep --version grep (GNU grep) 3.7
やり方
grepコマンドにおける-x
オプション(match only whole lines)を利用する。
具体的には以下。
$ grep -x -v -f b.txt a.txt apple cherry grape
-v
オプションを外せば逆に重なっている部分のみが表示される。
$ grep -x -f b.txt a.txt strawberry orange
以下、補足です。
補足
二つのファイルの差分はdiffコマンドで行えますが、行数が違うことでstrawberryは別モノとして認識されています。
$ diff a.txt b.txt 1,2d0 < apple < strawberry 4,5c2,4 < cherry < grape --- > pineapple > banana > strawberry
これを防ぐためにはsortコマンドで順序を揃えるという策はありますが、ファイルの行順序を保持したい場合は利用できないので今回は同解決策を利用しました。
以上です。