複数のファイルを横に結合したい
複数のファイルの内容を横に並べて結合したい場合がある。
例えば以下のような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行目の左側は空白になる。
\第一線のプログラマーの行動原理を学べる!/
