両方のファイルで特定の列の共通要素を見つけ、各ファイルの列値を出力します。

両方のファイルで特定の列の共通要素を見つけ、各ファイルの列値を出力します。

次のように、タブで区切られた値を持つ2つのファイルがあります。

ファイル1:

A    1
B    3
C    1
D    4

ファイル2:

E    1
B    3
C    2
A    9

列1に同じ文字列を持つファイル1とファイル2の間の行を見つけて、その値を取得したいと思います。必要な出力は、次のような単一ファイルです。

B    3    3
C    1    2
A    1    9

Unix one-linerでこれは可能ですか?

ベストアンサー1

join結果の行順序が関連しない場合、GNU coreutilsには必要な操作を正確に実行するコマンドが含まれています。

join <(sort file1) <(sort file2)

A 1 9
B 3 3
C 1 2

タブを復元するには:

join <(sort file1) <(sort file2) | tr ' ' '\t'

A   1   9
B   3   3
C   1   2

またはtオプションを使用してくださいjoin

<()別名プロセスの交換、ksh93(この機能のソース)、bashまたはzshが必要)

おすすめ記事