Linux / コマンド / paste - ファイルの行を横に結合
pasteは、複数のファイルから同じ順序の行を取得し、1つの行に並べて貼り付けます。基本の区切り文字はタブで、縦に積まれた値を1行に変える際にも使用できます。
ファイルの内容を順に連結する cat と異なり、paste は1行目同士、2行目同士を対応させます。行数が違う場合は長い側の行数まで出力し、終わった側は空のフィールドとして扱います。名前と点数などを結合する場合は、同じ対象が同じ行番号に並んでいることが前提です。
基本的な文法
paste [オプション] [ファイル ...]
インストールされている実装とオプションは、配布版によって異なる場合があります。man pasteで現在のシステムの説明を確認してください。
使用例
2つのファイルを列として結合
1つ目のファイルの各行の横に2つ目のファイルの対応する行を貼り付けます。
paste names.txt scores.txt
区切り文字の指定
タブの代わりにコロンで2つのファイルの値を区切ります。
paste -d ':' names.txt scores.txt
1つのファイルを1行に変える
-s はファイル内の改行を区切り文字に置き換えて、1行にまとめます。複数ファイルを渡した場合は、すべてをまとめて1行ではなく、ファイルごとに別の1行になります。
paste -s -d ',' names.txt
二つの入力の同じ行を結合する
2つのファイルの1行目同士、2行目同士を横に並べます。以下はBashのプロセス置換 <(...) で、通常の入力データファイルを保存せず、各コマンドの出力を渡す例です。Bashで実行してください。
paste -d, <(printf 'Ana\nBob\n') <(printf '7\n12\n')
例の出力:
Ana,7
Bob,12
pasteは同じキーを検索するjoinとは異なり、行の位置だけを合わせます。一方の入力の行数が少ない場合、足りない部分は空の値で埋められます。POSIXシェルのようにプロセス置換をサポートしない環境では、二つの入力を一時ファイルとして準備してください。
主なオプションと形式
| オプション・形式 | 説明 |
|---|---|
-d リスト |
結合位置ごとに使う区切り文字のリストを指定し、末尾まで使うと先頭から繰り返します。リスト全体を毎回挿入する指定ではありません。\t はタブ、\0 は空の区切りで、NUL文字の出力ではありません。 |
-s |
ファイルごとの行を順番に1行に結合します。 |
- |
標準入力をファイル引数の代わりに使用します。 |
使用する際の注意点
対応する行が同じ対象を指しているかを確認してください。順序が違っても、誤った組み合わせがエラーなく出力されます。共通キーで対応づけたい場合は、並べ替えの条件を確認してjoinによる共通フィールドの結合を使います。-d でカンマを指定しても、CSVの引用符やエスケープを自動で生成するわけではありません。
よくある質問
pasteとjoinの違いは何ですか?
pasteは行番号ごとに連結し、joinは共通フィールドの値が同じ行を結合します。
公式ドキュメント
オプションの正確な動作や実装ごとの差異は、pasteに関する公式ドキュメントで確認できます。




