- blogs:
- cles::blog

join コマンドを使ってテキストファイルを結合する

GNU coreutils にはたくさんの便利なコマンドが含まれています。
シェルスクリプトにも良く出てくる sort や uniq なんかもそのひとつですが、今回はちょっとマイナーな join を取り上げます。
実はこれを使うとテキストファイルでデータベースの表結合のような処理を簡単に行うことができます。
例えば以下のような ID と名前が書かれたファイルと、ID と成績が書かれたファイルがあるとします。
これを使って成績表を作りたいときに、実は join が使えると一撃で処理が可能です。
member.txt
grade.txt
これらのファイルではキーが先頭にあるので、以下のようにすることで結果を得ることができます。
デフォルトでは INNER JOIN のように結合可能された行だけが表示されます。
ちなみにファイルを sort しているのは、キーが昇順でソートされていないとエラーが出てしまうから。これについてはマニュアルの 8.3.2 Pre-sorting にも記載があります。
ソースを読んだわけではありませんが、これは内部が伝統的なマッチング処理になっているからでしょうか。こういう話はホストで COBOL をいじったことがある年代の人ならばピンとくるかもしれませんが、SQL 全盛になってからはマッチング処理を自分で書くこともなくなってしまいましたからね。
ちなみに OUTER JOIN のように 結合されない行も含めて表示したいときは -a オプションを使います。
LEFT OUTER JOIN の場合には 1 、RIGHT OUTER JOIN の場合には 2 を指定する必要があります。
マイナーなコマンドですが覚えておくと役に立ちます。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/9229
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(112803)
3 . 年次の人間ドックへ(112246)
4 . 2023 年分の確定申告完了!(1つめ)(111810)
5 . 三菱鉛筆がラミーを買収(111689)