複数のファイルを比較し、共通行を表示する方法は?

複数のファイルを比較し、共通行を表示する方法は?

以下のように4つのファイルがあります。

ファイル1コンテンツ(タブ区切り、3列):

applepen apple pen
strawberry straw berry

ファイル2の内容:

applepen
strawjelly

ファイル3コンテンツ(このファイルはソートされています):

apple
fan
straw

ファイル4コンテンツ(このファイルはソートされています):

pen
zenith

ファイル1のフィールド1をファイル2と、ファイル1のフィールド2をファイル3と、ファイル1のフィールド3をファイル4と比較する必要があります。 3つの一致がすべて見つかったら、ファイル1のフィールド1、2、3を印刷したいと思います。ファイル1のすべての行に対してこれを行いたいと思います。

ここで出力は次のようになります。

applepen apple pen

grepやcommなどを使ってこれを行う方法はありますか?

ベストアンサー1

これは仕事ですjoin

$ cat file1 
applepen    apple   pen
strawberry  straw   berry
$ cat file2
applepen
strawjelly
$ cat file3
apple
fan
straw
$ cat file4
pen
zenith
$ join file[12] | join -1 2 -o 1.1,1.2,1.3 - file3 | join -1 3 -o 1.1,1.2,1.3 - file4
applepen apple pen
$ 

空白以外のタブに本当に興味がある場合は、を使用して再翻訳できます| tr ' ' '\t'

おすすめ記事