一部のデータ分析ソフトウェアがアンチジョインと呼ぶものを実行したい:別のリストの行と一致する行を1つのリストから削除します。おもちゃのデータと予想される出力を次に示します。
$ echo -e "a\nb\nc\nd" > list1
$ echo -e "c\nd\ne\nf" > list2
$ antijoincommand list1 list2
a
b
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
join
ユーティリティでこれを行う1つの方法は次のとおりです。
$ join -v 1 list1 list2
a
b