複数のファイルを横に結合したい

複数のファイルの内容を横に並べて結合したい場合がある。

例えば以下のような2つのファイルがある。

apple
banana
cherry
red
yellow
red

2つのファイルを横に結合して以下のような出力を得たい。

apple	red
banana	yellow
cherry	red

paste コマンド

pasteコマンドは複数のファイルを横に結合するコマンド。

$ paste file1.txt file2.txt
apple	red
banana	yellow
cherry	red

複数のファイルを引数に指定すると、各ファイルの対応する行を横に並べて出力する。デフォルトの区切り文字はタブ。

3ファイル以上も指定できる。

$ paste file1.txt file2.txt file3.txt
apple	red	sweet
banana	yellow	sweet
cherry	red	sour

区切り文字を変更する

-dオプションで区切り文字を指定できる。

$ paste -d, file1.txt file2.txt
apple,red
banana,yellow
cherry,red

カンマ区切りで出力される。

複数の区切り文字を指定すると、順番に使用される。

$ paste -d,: file1.txt file2.txt file3.txt
apple,red:sweet
banana,yellow:sweet
cherry,red:sour

1番目と2番目の区切りにカンマ、2番目と3番目の区切りにコロンが使用される。

行を横につなげる

-sオプションを使用すると、ファイルの行を横につなげる。

$ paste -s file1.txt
apple	banana	cherry

ファイル内のすべての行がタブ区切りで横に並ぶ。

-dオプションと組み合わせて使用できる。

$ paste -s -d, file1.txt
apple,banana,cherry

具体例

CSVファイルの列を結合する

2つのCSVファイルの列を結合する場合は以下のように使用する。

Alice
Bob
Charlie
25
30
28
$ paste -d, names.csv ages.csv
Alice,25
Bob,30
Charlie,28

標準入力と組み合わせる

標準入力を使用する場合は-を指定する。

$ echo -e "1\n2\n3" | paste - file1.txt
1	apple
2	banana
3	cherry

行数が異なる場合

行数が異なるファイルを結合した場合、短いファイルの部分は空白になる。

A
B
$ paste short.txt file1.txt
A	apple
B	banana
	cherry

3行目の左側は空白になる。