フィールドのリストを含むファイルA
がある場合:
2017-04-23
2017-04-30
2017-05-07
2017-05-14
2017-05-21
2017-05-28
2017-06-04
2017-06-11
2017-06-18
2017-06-25
そして、フィールドのリストを含む別のファイルB
:
2017-04-23
2017-04-30
2017-05-07
2017-05-14
2017-05-21
2017-05-28
2017-06-04
2017-06-11
2017-06-18
2017-06-25
2017-07-02
2017-07-09
2017-07-16
2017-07-23
ファイルB
に存在するnotであるファイルA
のすべてのフィールドを知りたい場合、これら2つのファイルをすばやく比較するにはどうすればよいですか?
これは、ファイル間の相対的な違いを確認したい通常の差分ではなく、各行がマップのエントリであるハッシュ比較のようなものです。ファイルB
に存在しないファイルA
のすべての行のリストを取得して、ファイルA
の各行がディレクトリを表す場所でそれらを削除できるようにします。保存されます。
Bash/CoreUtilsソリューションを探しています。
ファイルがソートされている場合は、 comm を使用できます。
$ comm -13 A B
2017-07-02
2017-07-09
2017-07-16
2017-07-23
オプション付き:
grep
はこの仕事に適したツールですが、BashでもCoreUtilsからのものでもありません。
grep -Fxvf A B
これらのオプションはすべてPOSIXに準拠しています。から man 1 grep
:
-f pattern_file
パス名
pattern_file
で指定されたファイルから1つ以上のパターンを読み取ります。pattern_file
のパターンは、で終了します。 nullパターンは、pattern_fileの空の行で指定できます。-E
または-F
オプションも指定されていない限り、POSIX.1-2008の基本定義ボリュームのセクション9.3、基本正規表現で説明されているように、各パターンはBREとして扱われます。
-F
固定文字列を使用して一致させます。指定された各パターンを正規表現ではなく文字列として扱います。入力行に連続したバイトシーケンスとしてパターンのいずれかが含まれている場合、その行は一致する必要があります。ヌル文字列はすべての行に一致します。
-v
指定したパターンのいずれにも一致しない行を選択してください。
-v
オプションが指定されていない場合、選択される行は、指定されたパターンのいずれかに一致する行になります。
-x
固定文字列全体と一致するように終了を除く行のすべての文字を使用する入力行、または一致する行となる正規表現のみを考慮してください。
いくつかのパイプを使った別の方法
cat A B|sort|uniq -u
編集-UUOC
猫はいらない
sort A B|uniq -u