場合によっては、出力がさらに意味のある方法で2つのファイルを結合したいことがあります。たとえば、大陸の名前を含むファイルと、これらの大陸にある国の名前を含む別のファイルがあり、大陸と対応する国が同じ行に表示されるように両方のファイルを組み合わせる必要があります。
これはほんの一例です。そのようなユースケースは何百もある可能性があります。 Linuxを使用していて、これらの状況で役立つツールを探している場合は、参加を確認することをお勧めします。 、これはコマンドラインユーティリティです。このチュートリアルでは、わかりやすい例を使用してこのコマンドについて説明します。
この記事に記載されているすべての例はUbuntu16.04でテストされており、使用したjoinコマンドのバージョンは8.25であることに注意してください。
Linux参加コマンド
joinコマンドを使用すると、2つのファイルの行を共通のフィールドに結合できます。
join [OPTION]... FILE1 FILE2
このツールについてのマニュアルページの内容は次のとおりです。
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. Asia:
2. Africa:
3. Europe:
4. North America:
および
1. India
2. Nigeria
3. The Netherlands
4. The US
これで、次の方法でこれら2つのファイルを組み合わせることができます。
join file1 file2
この場合の上記のコマンドの出力は次のとおりです。
2。結合印刷のペアリングできない行を作成するにはどうすればよいですか?
デフォルトでは、joinコマンドはペアリング可能な行のみを出力します。たとえば、file1に追加のフィールド(行番号5)が含まれている場合でも:
1. Asia:
2. Africa:
3. Europe:
4. North America:
5. South America:
file1とfile2を結合しても、異なる出力は生成されません:
これは、ペアリングできない行が出力に残されているためです。ただし、必要に応じて、 -aを使用して出力に含めることができます。 コマンドラインオプション。このオプションでは、ファイル番号を渡して、ツールが話しているファイルを認識できるようにする必要があります。
たとえば、この場合、コマンドは次のようになります。
join file1 file2 -a 1
したがって、ファイル番号1(この場合はfile1)の対になっていない行も出力に表示されていることがわかります。
ペアになっていない行を印刷するだけの場合(つまり、出力でペアになっている行を非表示にする場合)、 -vを使用してこれを行うことができます。 コマンドラインオプション。このオプションは、-aとまったく同じように機能します。
-vオプションの例を次に示します。
3。カスタム結合フィールドを提供するにはどうすればよいですか?
すでに知っているように、joinは、デフォルトで最初のフィールドである共通フィールド上のファイルの行を結合します。ただし、必要に応じて、ファイルごとに異なるフィールドを指定できます。たとえば、file1とfile2のそれぞれの内容について考えてみます。
* 1. Asia:
& 2. Africa:
@ 3. Europe:
# 4. North America:
# 1. India
@ 2. Nigeria
& 3. The Netherlands
* 4. The US
ここで、各行の2番目のフィールドを結合の共通フィールドにしたい場合は、 -1 を使用して、これをツールに伝えることができます。 および-2 コマンドラインオプション。前者は最初のファイルを表し、後者は2番目のファイルを表します。これらのオプションには、対応するファイルの結合フィールドを参照する数値引数が必要です。
たとえば、この場合、コマンドは次のようになります。
join -1 2 -2 2 file1 file2
そして、このコマンドの出力は次のとおりです。
共通フィールドの位置が両方のファイルで同じである場合(先ほど説明した例のように、2である場合)、パーツを置き換えることができることに注意してください- 1[フィールド]-2[フィールド] -j [field]を使用したコマンドで 。したがって、この場合、コマンドは次のようになります。
join -j2 file1 file2
4。結合操作で大文字と小文字を区別しないようにするにはどうすればよいですか?
デフォルトでは、joinコマンドの操作では大文字と小文字が区別されます。たとえば、次のファイルについて考えてみます。
file1
A. Asia:
B. Africa:
C. Europe:
D. North America:
file2
a. India
b. Nigeria
c. The Netherlands
d. The US
ここで、デフォルトの(最初の)共通フィールドを使用してこれら2つのファイルを結合しようとしても、何も起こりません。これは、両方のファイルのフィールド要素の大文字と小文字が異なるためです。参加でこのケースの問題を無視するには、 -iを使用します コマンドラインオプション。
この場合のコマンドは次のとおりです。
join -i file1 file2
次のスクリーンショットは、実行中のコマンドを示しています。
5。ソートされた入力をチェックしないように結合するにはどうすればよいですか?
デフォルトでは、joinコマンドは、指定された入力がソートされているかどうかをチェックし、ソートされていない場合はレポートします。たとえば、file1の情報がソートされていない場合の次の出力について考えてみます。
これで、このエラー/警告を解消したい場合は、 -nocheck-orderを使用して行うことができます。 オプション。これは同じコマンドですが、このオプションが有効になっています:
したがって、joinコマンドが今回はソートされた入力をチェックしなかったことがわかります。
参加は理解するのに非常に簡単なツールではないかもしれませんが、一度慣れれば、状況によっては大幅な時間の節約になります。ここでは、ほとんどのコマンドラインオプションについて説明しました。これらを試して、完了したら、残りのコマンドのマニュアルページを確認してください。