テキストファイルを減算するUnixツール?

テキストファイルを減算するUnixツール?

大きなテーブル形式のセミコロンで区切られたテキストフィールドで構成される大きなファイルがあります。すでにソートされています。同じテキストフィールドで構成される小さなファイルがあります。ある時点で、誰かがこのファイルを他のファイルと関連付けてからソートして、前述の大容量ファイルを形成しました。大きなファイルから小さなファイルの行を減らしたいです。つまり、小さなファイルの各行に対して、一致する文字列が大きなファイルにある場合は、大きなファイルからその行を削除します。

ファイルはおおよそ次のようになります。

GenericClass1; 1; 2; NA; 3; 4;
GenericClass1; 5; 6; NA; 7; 8;
GenericClass2; 1; 5; NA; 3; 8;
GenericClass2; 2; 6; NA; 4; 1;

など

これを行うための迅速でエレガントな方法はありますか?それともawkを使うべきですか?

ベストアンサー1

あなたはそれを使用することができますgrep。小さなファイルを入力として受け取り、一致しない行を見つけるように指示します。

grep -vxFf file.txt bigfile.txt > newbigfile.txt

使用されるオプションは次のとおりです。

   -F, --fixed-strings
          Interpret PATTERN as a  list  of  fixed  strings,  separated  by
          newlines,  any  of  which is to be matched.  (-F is specified by
          POSIX.)
   -f FILE, --file=FILE
          Obtain  patterns  from  FILE,  one  per  line.   The  empty file
          contains zero patterns, and therefore matches nothing.   (-f  is
          specified by POSIX.)

   -v, --invert-match
          Invert the sense of matching, to select non-matching lines.  (-v
          is specified by POSIX.)
   -x, --line-regexp
          Select only those matches that exactly match the whole line.  
          (-x is specified by POSIX.)

おすすめ記事