次のように、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
join
GNU coreutilsには、-v
2つのソースファイルのいずれかでペアリングできない行を印刷するオプションがあります。これを使用して一致を反転することはうまくいきます。
$ 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