join -v1 fileA fileB
私は話すのと反対の仕事をしなければなりません。 fileAの最初のフィールドがfileBのすべての行の最初のフィールドと一致しない行を印刷する必要があります。代わりにfileAに行を書きたいです。する(最初のフィールドでは)はfileBの行と一致します。
make を試みましたが、join -o 1.1 2.1 fileA fileB
最初のファイルに作成された行の代わりに重複する行が繰り返されます(同じ場合)。
最も簡単な方法は何ですか?
ベストアンサー1
佐藤桂が演じたコメントしました。、fileBのフィールド1のみを表示するように結合を「属する」、次の一般結合を実行するように要求できます。これにより、fileAの行と(スプーフィングされた)fileBの(空の)残りの行が印刷されます。
join fileA <(awk '{print $1}' fileB)
与えられた入力ファイル:
$ cat fileA
1 blah
2 foo
3 bar
$ cat fileB
3 barely
4 baz
5 qux
結果の出力は次のとおりです。
$ join fileA <(awk '{print $1}' fileB)
3 bar
ワイルドカードawkの出力を次にパイプして、これをより直接的に(プロセスの置き換えを防ぐ)ことができることを指摘しますjoin
。
awk '{print $1}' fileB | join fileA -