BashでDejoinまたはReverse Joinを実行する方法

BashでDejoinまたはReverse Joinを実行する方法

一部のデータ分析ソフトウェアでは、アンチジョインと呼ばれるタスクを実行したいと思います。つまり、あるリストから別のリストの行に一致する行を削除することです。以下はいくつかのおもちゃのデータと予想される結果です。

$ echo -e "a\nb\nc\nd" > list1
$ echo -e "c\nd\ne\nf" > list2
$ antijoincommand list1 list2
a
b

ベストアンサー1

join入力をソートする必要があるため使用しませんjoin。これは単純な作業に不必要な複雑さです。代わりに使用できますgrep

$ grep -vxFf list2 list1
a
b

またはawk:

$ awk 'NR==FNR{++a[$0]} !a[$0]' list2 list1
a
b

ファイルがすでにソートされている場合、代替は次のjoin -v 1とおりです。comm -23

$ comm -23 list1 list2 
a
b

おすすめ記事