高度な join オプション
実際のデータ処理タスクでは、未マッチングのデータの処理や特定のフィールドの選択など、より高度な結合操作が必要になることがよくあります。このステップでは、join
コマンドのこれらの高度なオプションを紹介します。
例として、もう少し複雑な 2 つのファイルを作成しましょう。
echo -e "1:2023-04-01:Thunderstorm\n2:2023-04-15:Hurricane\n3:2023-05-02:Tornado\n4:2023-05-10:Blizzard" > ~/project/storms_types.txt
echo -e "1:High\n2:Medium\n5:Low" > ~/project/severity.txt
これらのファイルの内容を確認してみましょう。
cat ~/project/storms_types.txt
以下のように表示されるはずです。
1:2023-04-01:Thunderstorm
2:2023-04-15:Hurricane
3:2023-05-02:Tornado
4:2023-05-10:Blizzard
cat ~/project/severity.txt
以下のように表示されるはずです。
1:High
2:Medium
5:Low
これらのファイルの ID が完全に一致していないことに注意してください。
severity.txt
には嵐 ID 5 のエントリがありますが、storms_types.txt
には存在しません。
storms_types.txt
には嵐 ID 3 と 4 のエントリがありますが、severity.txt
には存在しません。
デフォルトでは、join
は両方のファイルで結合フィールドが一致する行のみを出力します。
join -t: ~/project/storms_types.txt ~/project/severity.txt
以下のように表示されるはずです。
1:2023-04-01:Thunderstorm:High
2:2023-04-15:Hurricane:Medium
出力には嵐 ID 1 と 2 のみが表示されます。これは、両方のファイルに存在する唯一の ID だからです。
未マッチングの行の処理
出力に未マッチングの行を含めるには、-a
オプションを使用できます。
join -t: -a 1 -a 2 ~/project/storms_types.txt ~/project/severity.txt
-a 1
オプションは、join
に最初のファイルの未マッチングの行を含めるよう指示し、-a 2
は 2 番目のファイルに対して同じことを行います。
以下のように表示されるはずです。
1:2023-04-01:Thunderstorm:High
2:2023-04-15:Hurricane:Medium
3:2023-05-02:Tornado:
4:2023-05-10:Blizzard:
5::Low
未マッチングの行では、もう一方のファイルのデータが存在する場所に空のフィールドがあることに注意してください。
特定のフィールドの選択
-o
オプションを使用して、各ファイルから特定のフィールドを選択して出力に含めることもできます。
join -t: -o 1.1,1.3,2.2 ~/project/storms_types.txt ~/project/severity.txt
-o 1.1,1.3,2.2
オプションは、出力するフィールドを指定します。
1.1
: 最初のファイルの最初のフィールド(嵐 ID)
1.3
: 最初のファイルの 3 番目のフィールド(嵐の種類)
2.2
: 2 番目のファイルの 2 番目のフィールド(深刻度)
以下のように表示されるはずです。
1:Thunderstorm:High
2:Hurricane:Medium
この出力には、嵐 ID、嵐の種類、深刻度レベルのみが含まれており、日付情報は省略されています。これは、多くのフィールドを持つファイルを扱う際に、出力に必要な特定のフィールドのみを取得する場合に特に便利です。