paste コマンド

目的

異なるファイルの行を結合します。

構文

paste-s ] [  -d List ] File1 ...

説明

paste コマンドは、コマンド・ラインに指定したファイルから入力を読みます。 - (マイナス符号) がファイル名として表示されると、標準入力から読みます。 このコマンドは指定した入力ファイルの対応する行を連結し、その結果の行を標準出力に書き出します。

デフォルトでは、paste コマンドは各ファイルを 1 列として処理し、これらのファイルをタブ文字を使って横に結合します (パラレル・マージ)。 paste コマンドは、cat コマンドに対応するものと考えることができます (cat コマンドはファイルを縦に、つまりファイルを 1 つずつ結合します)。

-s フラグを指定すると、paste コマンドは 同じ入力ファイルの後続の行を結合します (シリアル・マージ)。 デフォルトでは、タブ文字で行を結合します。

注:
  1. paste コマンドは、32767 個までの入力ファイルをサポートします (OPEN_MAX 定数)。
  2. pr -t -m コマンドのアクションは paste コマンドと同様ですが、ページ・レイアウトを整えるために、スペース、タブ、行を追加作成します。
  3. 入力ファイルはテキスト・ファイルでなくてはなりませんが、行の長さは無制限です。

フラグ

項目 説明
-d List 出力内で対応する行を区切る区切り文字を、List パラメーター内で指定した 1 つまたは複数の文字で変更します (デフォルトはタブです)。 List パラメーター内に複数の文字があると、それらの文字がその順序で出力の終わりまで反復されます。 パラレル・マージの場合、最後のファイルの行は、List パラメーターの文字でなく常に改行文字で終了します。

List パラメーター内では以下の特殊文字も使えます。

¥n
改行文字
¥t
タブ
¥¥
円記号
¥0
空文字列 (null 文字ではない)
c
拡張文字

シェルに対して特別な意味を持つ文字は引用符で囲まなくてはなりません。

-s 最初のファイルの後続の行を横にマージします。 このフラグを指定すると、paste コマンドは次のファイルに開始する前に 1 つのファイル全体に処理します。 1 つのファイルで行のマージが終了すると、改行を強制し、それから次の入力ファイルの行をマージするといったやり方で、 残りの入力ファイルを一度に 1 つずつ処理します。 -d フラグを指定する場合以外は、タブで行を区切ります。 List パラメーターにかかわりなく、ファイルの最後の文字は必ず改行文字になります。

終了状況

このコマンドは、以下の終了値を戻します。

項目 説明
0 正常終了。
>0 エラーが発生しました。

  1. データの複数の列を一度にペーストするには、以下のように入力します。
    paste names places dates > npd
    npd というファイルが作成されます。 このファイルでは、ある列に names ファイル、別の列に places ファイル、さらに別の列に dates ファイルのデータが入っています。namesplacesdates ファイルが以下のようである場合、
    names           places          dates
    rachel          New York        February 5
    jerry           Austin          March 13
    mark            Chicago         June 21
    marsha          Boca Raton      July 16
    scott           Seattle         November 4
    npd ファイルの内容は以下のようになります。
    rachel          New York        February 5
    jerry           Austin          March 13
    mark            Chicago         June 21
    marsha          Boca Raton      July 16
    scott           Seattle         November 4
    タブ文字が各行の名前、ロケーション、および日付を区切ります。タブ・ストップは 8 桁目ごとに設定されているので、これらの列が必ずしも位置調整されるとは限りません。
  2. 列をタブ以外の文字で区切るには、以下のように入力します。
    paste  -d"!@" names places dates > npd
    上記の例では、! と @ を列セパレーターとして交互に使用します。 namesplacesdates ファイルが例 1 と同じであれば、npd ファイルの内容は以下のようになります。
    rachel!New York@February 5
    jerry!Austin@March 13
    mark!Chicago@June 21
    marsha!Boca Raton@July 16
    scott!Seattle@November 4
  3. 標準入力を複数の列に表示するには、以下のように入力します。
    ls | paste - - - -
    ここでは、現行ディレクトリーが 4 つの列にリストされます。 - (マイナス) はそれぞれ paste コマンドに、標準入力から読んだデータを含む列を作成するように指示します。1 行目が 1 列目に、2 行目が 2 列目にというように入れられます。

    これは次のコマンドと等価です。

    ls | paste  -d"¥t¥t¥t¥n" -s -
    この例では、標準入力から得られた後続行によって、このページにある列が埋められます。 -d"¥t¥t¥t¥n" は各列の後に挿入される文字を定義します。タブ文字 (¥t) は最初の 3 列の後に、改行文字 (¥n) は 4 列目の後に挿入されます。-d フラグを指定しないと、paste -s - コマンドはすべての入力を 1 行として表示し、各列の間をタブ文字で区切ります。

ファイル

項目 説明
/usr/bin/paste paste コマンドが入っています。