はじめに
こんにちは!今回はjoinコマンドについて解説します。
joinは2つのソート済みファイルを共通キーで結合するコマンドです。SQLのJOINみたいな感じで、関連するデータをマージできます。
データベース操作みたいなことがコマンドラインでできるので、大量データ処理では超便利です。
joinコマンドとは
joinは、2つのソート済みファイルを指定されたキーフィールドで結合するコマンドです。
データベースの結合操作と同じく、2つのファイルに共通するキー値を持つ行同士をマッチングして、1つの行に統合します。CSVデータの統合やログファイルの相互参照に活躍します。
基本構文
|
|
重要: 両方のファイルが結合キーでソート済みである必要があります。デフォルトでは最初のフィールド(スペース区切り)をキーとします。
主なオプション
| オプション | 説明 |
|---|---|
-1 フィールド |
ファイル1の結合キーフィールド番号 |
-2 フィールド |
ファイル2の結合キーフィールド番号 |
-t 区切り文字 |
フィールドの区切り文字を指定 |
-o フォーマット |
出力フォーマットを指定 |
-a ファイル番号 |
マッチしない行も出力 |
-v ファイル番号 |
マッチしない行のみ出力 |
-e 文字列 |
空フィールドの代替文字列 |
使用例
例1: 基本的な結合
|
|
実行結果:
|
|
users.txtとaddresses.txtの最初のフィールド(ID)が一致する行を結合します。
例2: CSVファイルの結合
|
|
実行結果:
|
|
カンマ区切りのファイルを結合します。-t,で区切り文字をカンマに変更。
例3: 異なるフィールドで結合
|
|
ファイル1の2番目フィールドと、ファイル2の1番目フィールドを結合キーとします。
例4: マッチしない行も含める
|
|
実行結果:
|
|
ファイル1にだけある行も表示されます(ファイル2の情報は空)。
例5: マッチしない行のみ表示
|
|
実行結果:
|
|
ファイル1にあるが、ファイル2に一致するものがない行だけを表示。
例6: 出力フォーマットの指定
|
|
出力する列と順序を指定します。1.1はファイル1の1番目フィールド、2.2はファイル2の2番目フィールド。
例7: 空フィールドの代替文字列
|
|
マッチしない部分をN/Aで埋めます。
例8: パイプと組み合わせ
|
|
未ソートのファイルをソートしながら結合します。
例9: 複数フィールドでの結合(工夫)
|
|
コロン区切りのパスワードファイルを結合。
例10: テーブル形式で見やすく
|
|
結合後にcolumnコマンドで整形。見やすいテーブル形式に。
Tips・注意点
ファイルは必ずソート済みにする
joinはソート済みファイル専用です。未ソートだとおかしな結果になります。
|
|
結合キーでソートする
複数フィールドで結合する場合は、その順序でソートしましょう。
|
|
commコマンドとの違い
comm: 同じフィールドで並んでいる行を比較(3列出力)join: 指定フィールドで行をマッチングして結合(1行に統合)
|
|
実践的な使い方
顧客データの統合
|
|
顧客ID(キー)で顧客情報と注文情報を統合。
ログの相互参照
|
|
イベントログ内のユーザーIDと、ユーザーリストを照合。
不在なデータの検出
|
|
期待されるが実際には存在しないIDを検出(監査用)。
テーブル形式での複合データ表示
|
|
パスワードファイルとシャドウデータを統合(ユーザー名、シェル、暗号化パスワード)。
まとめ
joinコマンドのポイント:
- 2つのソート済みファイルをキーで結合する
-1、-2: 各ファイルの結合キーフィールドを指定-t: フィールド区切り文字を指定(デフォルトはスペース)-o: 出力フォーマットを指定-a: マッチしない行も出力-v: マッチしない行のみ出力- ソート順序が重要!必ず結合キーでソートする
SQLみたいなデータ操作がLinuxコマンドラインでできます。大規模ファイル処理やデータ統合には欠かせないコマンドですね。