2 つのファイルがあるとします。
ファイル1:
1|abc
2|cde
3|pkr
ファイル 2:
1|abc
2|cde
4|lkg
を使用して両方のファイルの真の違いをリストするにはどうすればよいawk
ですか? 2番目のファイルが最初のファイルのサブセットである場合、次のことができます-
awk -F"|" 'NR==FNR{a[$1]=$2;next} !($1 in a)' file{1,2}
しかし、これは私に与えるだろう
4|lkg
それが本当の違いなので、次のように出力したいと思います。違いは次のようになります。
3|pkr
4|lkg
違いの基準:
- フィールド 1 は file1 に存在しますが、file2 には存在しません。
- フィールド 1 は file2 に存在しますが、file1 には存在しません。
- フィールド 1 は両方のファイルに存在しますが、値が異なります。
背景:
ファイル 1 とファイル 2 は、異なるデータベースからエクスポートされたテーブルです。パイプ区切り文字で区切られた 2 つのフィールドがあります。フィールド 1 は常に一意です。フィールド 2 は同じである可能性があります。
私の意図は、awk
真の違いを見つけるために 1 つのライナーを実行することです。上記のコマンドを 2 回実行すると (最初の実行では最初にファイル 1 を渡し、2 回目の実行では最初にファイル 2 を渡します)、両方で欠落しているレコードを取得します。ただし、これをシングルパスで行いたいです。