ホーム > テキスト処理・検索 > join

join: 2つのファイルの共通フィールドをマージする

joinコマンドは、2つのソートされたテキストファイルから指定された共通フィールドに基づいて行をマージし、標準出力に出力します。データベースのJOIN操作と同様に機能し、各ファイルの対応する行を結合して新しい行を生成します。

概要

joinは、2つのファイルの特定のフィールドを比較して一致する行を結合します。このコマンドは、入力ファイルが共通フィールドに基づいてソートされている場合にのみ正しく機能します。ソートされていないファイルに使用すると、予期しない結果が生じる可能性があります。

主な特徴

  • 2つのファイルの共通フィールドに基づくマージ
  • 入力ファイルのソートが必須
  • さまざまなオプションで出力形式を制御
  • データ統合およびレポート生成に便利

主なオプション

joinコマンドは、さまざまなオプションを通じてマージ基準、出力形式、および一致しない行の処理方法を細かく制御できます。

フィールド指定と区切り文字

出力制御

生成されたコマンド:

コマンドを組み合わせてみてください。

説明:

`join` コマンドを実行します。

これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。

使用例

joinコマンドのさまざまな活用例を通じて、2つのファイルのデータを効果的にマージする方法を学びます。

基本マージ

echo "1 apple\n2 banana" > file1.txt && echo "1 red\n2 yellow" > file2.txt && join file1.txt file2.txt

2つのファイルの最初のフィールドを基準にマージします。(ファイル作成後に実行)

特定フィールドのマージ

echo "apple 1\nbanana 2" > file3.txt && echo "red 1\nyellow 2" > file4.txt && join -j 2 file3.txt file4.txt

2つのファイルの2番目のフィールドを基準にマージします。(ファイル作成後に実行)

タブ区切り文字の使用

echo -e "id\tname\n1\tAlice\n2\tBob" > users.tsv && echo -e "id\tcity\n1\tSeoul\n3\tParis" > cities.tsv && join -t $'\t' users.tsv cities.tsv

タブで区切られたファイルをマージします。(ファイル作成後に実行)

一致しない行を含める

echo "1 apple\n2 banana\n3 orange" > file5.txt && echo "1 red\n2 yellow" > file6.txt && join -a 1 file5.txt file6.txt

最初のファイル(file5.txt)にのみ存在する行も出力に含めます。(ファイル作成後に実行)

特定フィールドのみ出力

echo "1 apple\n2 banana" > file7.txt && echo "1 red\n2 yellow" > file8.txt && join -o 1.1,1.2,2.2 file7.txt file8.txt

最初のファイルの1番目と2番目のフィールド、および2番目のファイルの2番目のフィールドのみを出力します。(ファイル作成後に実行)

ヒントと注意点

joinコマンドを使用する際に役立つヒントと注意すべき点です。

重要なヒント

  • **入力ファイルのソート**: joinコマンドは、入力ファイルがジョインフィールドに基づいてソートされている場合にのみ正しく機能します。`sort`コマンドを使用して事前にソートすることが不可欠です。例: `sort file1.txt > sorted_file1.txt`
  • **フィールド区切り文字**: デフォルトの区切り文字はスペース(スペース、タブ)です。異なる区切り文字を使用する場合は、`-t`オプションを使用してください。例えば、CSVファイルの場合は`-t ','`を使用します。
  • **出力形式の制御**: `-o`オプションを使用して、出力されるフィールドの順序と表示されるフィールドを精密に制御できます。`ファイル番号.フィールド番号`の形式で指定します(例: `1.2`は最初のファイルの2番目のフィールド)。
  • **一致しない行の処理**: `-a`または`-v`オプションを使用して、一致する行だけでなく一致しない行も含めたり、一致しない行のみを出力したりできます。

同じカテゴリのコマンド