2つのファイルを比較し、最初の列と2番目の列に基づいて2番目のファイルから一致しない行を取得します。

2つのファイルを比較し、最初の列と2番目の列に基づいて2番目のファイルから一致しない行を取得します。

次のように、2つのパイプで区切られたファイルがあります。

ファイル1

TEST|123456
TEST|123457
TEST|123458
TEST|123459
TEST|123460

ファイル2

TEST|123456|RAY|DOE||
TEST|123457|JANE|DOE||
TEST|123458|ROSE|DAWN||
TEST|123459|GEORGE|BRID||
TEST|123460|RALPH|DOE||
TEST|123461|JOHN|DOE||
TEST|123462|STEVE|SMITH||

ファイル3 - 希望の出力

TEST|123461|JOHN|DOE||
TEST|123462|STEVE|SMITH||

file1とfile2の最初の列と2番目の列をキーとして使用して、file2から一致しない行を取得したいと思います。

ベストアンサー1

joinGNU coreutilsには、-v2つのソースファイルのいずれかでペアリングできない行を印刷するオプションがあります。これを使用して一致を反転することはうまくいきます。

$ cat file1.txt
TEST|123456
TEST|123457
TEST|123458
TEST|123459
TEST|123460

$ cat file2.txt
TEST|123456|RAY|DOE||
TEST|123457|JANE|DOE||
TEST|123458|ROSE|DAWN||
TEST|123459|GEORGE|BRID||
TEST|123460|RALPH|DOE||
TEST|123461|JOHN|DOE||
TEST|123462|STEVE|SMITH||

$ join -t '|' -j 2 -o '2.1,2.2,2.3,2.4' -v 2 file1.txt file2.txt
TEST|123461|JOHN|DOE
TEST|123462|STEVE|SMITH

おすすめ記事