結合と分割
100%

テキスト操作 · レッスン 11

結合と分割

並べ替え済みの 2 つのテキストファイルをキーで結合し、1 つのファイルを名前付きの断片へ分割する方法を学びます。

joinsplit は異なるファイル処理を行います。join は並べ替え済みの 2 つのテキスト入力から関連レコードを結合し、split は 1 つの入力を連続した小ファイルへ分割します。

先頭フィールドで 2 ファイルを結合する

join は標準で、ちょうど 2 つの入力ファイルにある先頭の空白区切りフィールドを比較します。次のファイルは並べ替え済みです。

people.txt

1 John
2 Jane
3 Mary

surnames.txt

1 Doe
2 Doe
3 Sue

キーが等しいレコードを結合します。

$ join people.txt surnames.txt
1 John Doe
2 Jane Doe
3 Mary Sue

出力には共有キーが 1 回、その後に第 1、第 2 ファイルの残りのフィールドが入ります。join が一度に処理するのは 2 ファイルで、3 つの通常ファイルを 3 方向の関係結合としては受け取りません。

フィールドオプションなしの join first.txt second.txt はどのレコードを結合しますか?

結合キーを並べ替える

各入力は、互換性のある比較規則で結合フィールド順に並べる必要があります。標準のフィールド 1 なら、sort -k 1,1 でコピーを用意します。

$ LC_ALL=C sort -k 1,1 people-raw.txt > people.txt
$ LC_ALL=C sort -k 1,1 surnames-raw.txt > surnames.txt
$ LC_ALL=C join people.txt surnames.txt

並べ替えと結合で同じロケールを使えば照合規則が一致します。シェルが先にファイルを切り詰めるため、並べ替え結果を同じ入力パスへリダイレクトしないでください。

join が確実に一致を処理するため、通常どの準備が必要ですか?

異なる結合フィールドを選ぶ

第 1 ファイルのキーには -1 FIELD、第 2 ファイルには -2 FIELD を使います。第 1 入力に次が含まれるとします。

John 1
Jane 2
Mary 3

第 2 入力には次が含まれます。

1 Doe
2 Doe
3 Sue

第 1 入力をフィールド 2、第 2 入力をフィールド 1 で並べた後、次を実行できます。

$ join -1 2 -2 1 people.txt surnames.txt
1 John Doe
2 Jane Doe
3 Mary Sue

コロンなど 1 文字の非空白区切りには -t CHARACTER を使います。-a 1-a 2 は片方にしかない行を含められますが、標準では一致したキーだけを出力します。

第 1 ファイルのフィールド 2 と第 2 ファイルのフィールド 1 を結合するオプションはどれですか?

行数で分割する

split は 1 つの入力の連続部分を別々の出力ファイルへ書きます。キー結合を行う join の逆操作ではありません。

$ split large.txt

GNU の標準動作では 1 ファイルにつき最大 1000 行、接頭辞 x を使い、xaaxabxac などを作ります。行数は -l NUMBER、出力接頭辞は最後のオペランドで指定します。

$ split -l 500 large.txt part-

large.txt を最大 500 行ずつ、接頭辞 part- の断片へ分割するコマンドはどれですか?

サイズで分割する

-b SIZE は入力をバイトサイズで分割します。GNU の KMG などはここでは 1024 の累乗です。

$ split -b 10M archive.bin chunk-

最後の断片だけ小さくなる可能性があります。split はアーカイブの目録や再構築用メタデータを作らないため、接尾辞の順序を保ち、必要なら順番に連結してください。

archive.bin を接頭辞 chunk-、10 MiB ずつに分割するコマンドはどれですか?

レッスン完了

結合と分割 を完了しました

並べ替え済みレコードを結合し、1 つの入力を順序付きの断片へ分割できるようになりました。

  • 等しいキーフィールドでちょうど 2 ファイルを結合する。

  • 両入力を結合キーで一貫して並べ替える。

  • -1-2 で標準以外のキーフィールドを選ぶ。

  • -l で行数ごとに分割する。

  • -b と明確な接頭辞でバイトサイズごとに分割する。

学習進捗を保存

無料アカウントを作成してこのレッスンを保存し、どのデバイスからでも学習を続けられます。

無料アカウントを作成
次のレッスン
テキスト操作 に戻る