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