Hitachi

JP1 Version 11 JP1/Advanced Shell


8.4.24 pasteコマンド(複数のファイルを行単位で連結する)

形式

paste[-s][-d リスト][パス名 ...]

機能

複数のファイルを行単位に連結して標準出力に出力します。ファイル内のすべての行を1行に結合してから複数のファイルを連結することもできます。

引数

-s

ファイル内のすべての行を区切り文字によって結合して1つの行にします。

-sオプションを指定しない場合は,各ファイルの同じ行番号の行を区切り文字で結合します。

-d リスト

結合する行と行の間に挿入する区切り文字をリストに指定します。-dオプションを指定しない場合,タブ文字が指定されたものとします。

スペースまたはタブを指定する場合は,"(ダブルクォーテーション)で囲んでください。

区切り文字には次の特殊文字も指定できます。

使用できる特殊文字

意味

備考

\n

改行文字

Windowsの場合,[CR]+[LF]が改行文字となります。

UNIXの場合,[LF]が改行文字となります。

\t

タブ文字

\\

1つのバックスラッシュ文字

\0

空文字列

長さ0の文字列("")です。結合する行と行の間に区切り文字を挿入しません。

(凡例)

−:該当なし

特殊文字を指定する場合,pasteコマンドを実行するシェルによってはエスケープ文字として扱われるため,特殊文字をクォーテーション("または')で囲む必要があります。特殊文字以外の文字の直前に「\」を指定した場合,「\」は無視され,「\」の直後の文字が区切り文字として使用されます。また,「\」だけを指定した場合はエラーで終了します。

区切り文字は複数指定できます。区切り文字を複数指定した場合の動作を次に示します。

  • 行を結合するたびに区切り文字を取り出して,行と行の間に挿入します。区切り文字は先頭の区切り文字から順に取り出されます。

  • -sオプションが指定されていない場合,結合した行を出力したときは,再び先頭の区切り文字から順に取り出されます。

  • -sオプションが指定されている場合,ファイル内のすべての行を結合して出力したときは,再び先頭の区切り文字から順に取り出されます。

  • 区切り文字を取り出すときに,-dオプションに指定した区切り文字を使い切っていた場合は再び先頭の区切り文字から順に取り出されます。

パス名

連結して出力するファイルのパス名を指定します。パス名を指定しない,またはパス名に「-」を指定した場合は,標準入力から入力します。

パス名,および「-」は複数指定できます。パス名と「-」を混在して指定することもできます。

複数のファイルを指定した場合,オープンに失敗したファイルがあると次のように動作します。

  • -sオプションが指定されていないときはエラーメッセージを出力し,終了コード1でエラー終了します。標準出力には何も出力されません。

  • -sオプションが指定されているときはオープンに失敗したファイル対してエラーメッセージを出力し,処理を続行します。すべてのファイルに対して処理をしたあと終了コード1で終了します。

パス名を1つだけ指定した場合は次のように動作します。

  • -sオプションが指定されていないときは行の出力だけが行われます。

  • -sオプションが指定されているときはファイル内のすべての行を結合して出力します。

行の入力と出力

入力ファイル内の行は,改行文字で区切られたレコードが1つの行と見なされます。

連結後に出力される行の終わりには改行文字が出力されます。出力される改行文字は次のとおりです。

行単位の連結(-sオプションが指定されていない場合)

各ファイルの同じ行番号の行を区切り文字によって結合し,結合した結果を1つの行として出力します。なお,同じ行番号の行が空行の場合,行の内容は空文字列としてほかのファイルの行と結合されます。

各ファイルから同じ行番号の行を入力するときに,一部のファイルの入力でファイルの終端に達した場合,そのファイルの行の内容は空文字列としてほかのファイルの行と結合されます。

file1,file2,file3,file4を行単位に連結する例を次に示します。

file1の内容
a001
a002
file2の内容
b001
(空行)
b003
file3の内容
c001
c002
c003
c004
file4の内容
d001
file1,file2,file3,file4を行単位に連結するコマンド
$ paste file1 file2 file3 file4

このとき,次のように連結します。「→」は区切り文字のタブ文字を表します。

a001→b001→c001→d001   1.
a002→→    c002→       2.
→    b003→c003→       3.
→    →    c004→       4.
  1. file1,file2,file3,file4の1行目の内容を結合して出力します。行と行の間にはタブ文字を挿入します。

  2. 次の値をタブ文字によって結合し出力します。

    • file1の2行目の内容

    • file2の2行目は空行のため空文字列

    • file3の2行目の内容

    • file4はファイル終端のため空文字列

    空文字列は長さ0の文字列であるため,実際には「file1の2行目の内容+タブ文字+タブ文字+file3の2行目の内容+タブ文字」が出力されます。

  3. 次の値をタブ文字によって結合し出力します。

    • file1はファイル終端のため空文字列

    • file2の3行目の内容

    • file3の3行目の内容

    • file4はファイル終端のため空文字列

    実際には「タブ文字+file2の3行目+タブ文字+file3の3行目+タブ文字」が出力されます。

  4. 次の値をタブ文字によって結合し出力します。

    • file1はファイル終端のため空文字列

    • file2はファイル終端のため空文字列

    • file3の4行目の内容

    • file4はファイル終端のため空文字列

    実際には「タブ文字+タブ文字+file3の4行目+タブ文字」が出力されます。

なお,一部のファイルが空のファイルの場合もそのファイルの行の内容は空文字列としてほかのファイルの行と結合されます。ただし,引数に指定したファイルすべてが空のファイルの場合は行は出力されません。

ファイル内の行の結合(-sオプションが指定されている場合)

1つのファイル内のすべての行を区切り文字によって結合し,1つの行にしてからほかのファイルと連結します。なお,ファイルが空の場合は改行文字だけを出力します。引数に指定したファイルすべてが空のファイルの場合もファイルごとに改行文字が出力されます。

file1,file2,file3,file4を連結する例を次に示します。

file1の内容
a001
a002
file2の内容
空のファイル
file3の内容
c001
c002
c003
c004
file4の内容
d001
file1,file2,file3,file4を連結するコマンド
$ paste -s file1 file2 file3 file4

このとき,次のように連結します。「→」は区切り文字のタブ文字を表します。

a001→a002               1.
                         2.
c001→c002→c003→c004   3.
d001                     4.
  1. file1のすべての行を区切り文字で結合して出力します。

  2. file2は空のファイルのため改行文字だけを出力します。

  3. file3のすべての行を区切り文字で結合して出力します。

  4. file4は1行だけのため,行の内容だけ出力します。

標準入力から入力した行の結合

標準入力から入力した行の結合について説明します。

行単位の結合(-sオプションが指定されていない場合)

標準入力から1行だけ入力し,ほかのファイルの行と結合します。「-」を複数指定した場合は「-」を指定した順に標準入力から1行ずつ入力し,それぞれ入力した行を結合します。

ファイルと標準入力の内容を連結する場合,標準入力からの入力は連結するファイルの終端に達するまで行われます。このため,標準入力から行を入力するときにEOFが入力されると,空文字列としてファイルの行と結合されます。

file1を標準入力から入力しfile2と行単位に連結する例を次に示します。

file1の内容
a001
a002
a003
a004
a005
file2の内容
b001
b002
b003
b004
file1,file2を行単位に連結するコマンド
$ cat file1 | paste - file2 -

行は次の順に結合されます。

  1. file1から入力した行(標準入力から入力)

  2. file2から入力した行

  3. file1から入力した行(標準入力から入力)

このとき,次のように連結します。「→」は区切り文字のタブ文字を表します。

a001→b001→a002     1.
a003→b002→a004     2.
a005→b003→         3.
→    b004→         4.
  1. 次の値をタブ文字によって結合し出力します。

    ・標準入力から入力した行の内容(file1の1行目の内容)

    ・file2の1行目の内容

    ・標準入力から入力した行の内容(file1の2行目の内容)

  2. 次の値をタブ文字によって結合し出力します。

    ・標準入力から入力した行の内容(file1の3行目の内容)

    ・file2の2行目の内容

    ・標準入力から入力した行の内容(file1の4行目の内容)

  3. 次の値をタブ文字によって結合し出力します。

    ・標準入力から入力した行の内容(file1の5行目の内容)

    ・file2の3行目の内容

    ・標準入力からはEOFを入力した(標準入力に出力するファイルが終端に到達している)ため空文字列

  4. 次の値をタブ文字によって結合し出力します。

    ・標準入力からはEOFを入力した(標準入力に出力するファイルが終端に到達している)ため空文字列

    ・file2の4行目の内容

    ・標準入力からはEOFを入力した(標準入力に出力するファイルが終端に到達している)ため空文字列

ファイル内の行の結合(-sオプションが指定されている場合)

標準入力からEOFを入力するまで行の入力を繰り返し,標準入力から入力したすべての行を区切り文字で結合します。結合した行をほかのファイルと連結します。file1を標準入力から入力しfile2と連結する例を次に示します。

file1の内容
a001
a002
a003
file2の内容
b001
b002
file1,file2を連結するコマンド(file1を標準入力から入力)
$ cat file1 | paste -s - file2

このとき,次のように連結します。「→」は区切り文字のタブ文字を表します。

a001→a002→a003    1.
b001→b002          2.
  1. 標準入力から入力したすべての行(file1のすべての行)を区切り文字で結合して出力します。

  2. file2から入力したすべての行を区切り文字で結合して出力します。

終了コード

終了コード

意味

0

正常終了

1

エラー終了

  • 引数に指定したファイルのうち,オープンに失敗したファイルがありました。

    -sオプションが指定されていない場合は,ファイルは連結されません。

    -sオプションが指定されている場合は,ファイルのオープン失敗時にエラーメッセージを出力し,次に指定されているファイルを処理します。

2

エラー終了

  • 不正なオプションを指定しました。

3

エラー終了

  • メモリ不足が発生したなどの処理を続行できないエラーが発生しました。

注意事項

使用例