Linux, コマンド · 1 min read · Sep 17, 2025

初心者のためのLinux Joinコマンドチュートリアル(5つの例)

時には、出力がより意味を持つように2つのファイルを結合したい場合があります。例えば、大陸の名前を含むファイルと、これらの大陸に位置する国の名前を含む別のファイルがあり、要件は両方のファイルを結合して、大陸と対応する国が同じ行に表示されるようにすることです。

これは一例に過ぎません - そのようなユースケースは数百もあるかもしれません。Linuxを使用していて、このような状況で役立つツールを探している場合は、コマンドラインユーティリティであるjoinをチェックしてみると良いでしょう。このチュートリアルでは、いくつかの理解しやすい例を用いてこのコマンドについて説明します。

この記事で言及されているすべての例はUbuntu 16.04でテストされており、使用したjoinコマンドのバージョンは8.25です。

Linux joinコマンド

joinコマンドは、共通のフィールドに基づいて2つのファイルの行を結合することを可能にします。

join [OPTION]... FILE1 FILE2

このツールについてのmanページには次のように書かれています:

For each pair of input lines with identical join fields, write a line to standard output. The default   
join field is the first, delimited by blanks. When FILE1 or FILE2 (not both) is -, read standard input.

以下の例は、joinコマンドがどのように機能するかについて良いアイデアを提供するはずです。

1. joinコマンドを使用してファイルの行を結合する方法は?

joinコマンドの基本的な使い方を理解しましょう。例えば、次の行を含む2つのファイル(file1とfile2)があるとします:

1. アジア:  
2. アフリカ:  
3. ヨーロッパ:  
4. 北アメリカ:

1. インド  
2. ナイジェリア  
3. オランダ  
4. アメリカ合衆国

さて、これら2つのファイルを次のように結合できます:

join file1 file2

上記のコマンドの出力は次のようになります:

2. joinにペアにならない行を印刷させる方法は?

デフォルトでは、joinコマンドはペアになれる行のみを印刷します。例えば、file1に余分なフィールド(行番号5)が含まれている場合:

1. アジア:  
2. アフリカ:  
3. ヨーロッパ:  
4. 北アメリカ:  
5. 南アメリカ:

file1とfile2を結合しても、出力は変わりません:

これは、ペアにならない行が出力から省かれるためです。しかし、出力にそれらを含めたい場合は、-aコマンドラインオプションを使用することで可能です。このオプションでは、ツールがどのファイルを指しているのかを知るためにファイル番号を渡す必要があります。

例えば、私たちのケースでは、コマンドは次のようになります:

join file1 file2 -a 1

これで、ファイル番号1(私たちのケースではfile1)のペアにならない行も出力に表示されたことがわかります。

ペアになった行を出力から抑制してペアにならない行のみを印刷したい場合は、-vコマンドラインオプションを使用することでこれを行うことができます。このオプションは、-aが機能するのとまったく同じように機能します。

-vオプションの例は次のとおりです:

3. カスタム結合フィールドを提供する方法は?

既に知っているように、joinは共通のフィールドに基づいてファイルの行を結合しますが、デフォルトでは最初のフィールドです。しかし、必要に応じて、各ファイルに対して異なるフィールドを指定することができます。例えば、file1とfile2にそれぞれ次の内容があるとします。

* 1. アジア:  
& 2. アフリカ:  
@ 3. ヨーロッパ:  
# 4. 北アメリカ:
# 1. インド  
@ 2. ナイジェリア  
& 3. オランダ  
* 4. アメリカ合衆国

さて、各行の2番目のフィールドをjoinの共通フィールドにしたい場合は、-1および-2コマンドラインオプションを使用してこれをツールに伝えることができます。前者は最初のファイルを表し、後者は2番目のファイルを指します。これらのオプションには、対応するファイルの結合フィールドを指す数値引数が必要です。

例えば、私たちのケースでは、コマンドは次のようになります:

join -1 2 -2 2 file1 file2

このコマンドの出力は次のようになります:

共通フィールドの位置が両方のファイルで同じ場合(例えば、先ほどの例のように2の場合)、コマンド内の-1 [field] -2 [field]の部分を-j [field]に置き換えることができます。したがって、私たちのケースでは、コマンドは次のようになります:

join -j2 file1 file2

4. join操作を大文字と小文字を区別しないようにする方法は?

デフォルトでは、joinコマンドの操作は大文字と小文字を区別します。例えば、次のファイルを考えてみてください:

file1

A. アジア:  
B. アフリカ:  
C. ヨーロッパ:  
D. 北アメリカ:

file2

a. インド  
b. ナイジェリア  
c. オランダ  
d. アメリカ合衆国

さて、これら2つのファイルを結合しようとすると、デフォルトの(最初の)共通フィールドを使用しても何も起こりません。これは、両方のファイルのフィールド要素のケースが異なるためです。このケースの問題を無視するためには、-iコマンドラインオプションを使用します。

私たちのケースのコマンドは次のようになります:

join -i file1 file2

次のスクリーンショットは、コマンドが実行されている様子を示しています:

5. joinがソートされた入力をチェックしないようにする方法は?

デフォルトでは、joinコマンドは提供された入力がソートされているかどうかをチェックし、そうでない場合は報告します。例えば、file1の情報がソートされていなかった場合の出力は次のようになります:

このエラー/警告を消したい場合は、–nocheck-orderオプションを使用することで可能です。次のコマンドは、このオプションを有効にしたものです:

これで、joinコマンドが今回はソートされた入力をチェックしなかったことがわかります。

結論

Joinは理解するのが非常に簡単なツールではないかもしれませんが、一度慣れてしまえば、特定の状況で大幅な時間の節約になる可能性があります。ここでは、ほとんどのコマンドラインオプションをカバーしました。これらを試してみて、完了したらコマンドのmanページを確認して残りを見てください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。