ファイルのマージ(pasteコマンド)

30分プログラム、その120。ファイルをマージするプログラム。

昔、書き捨てたプログラムの改造版。書いてから気がついたけど、pasteコマンドそのものだった。

使い方

$ cat 01
000
111
222
333
444

$ cat 02
AAA
BBB
CCC
DDD

$ cat 03
aaa
bbb
ccc
ddd

$ ruby paste.rb 0[1-3]
000 AAA aaa
111 BBB bbb
222 CCC ccc
333 DDD ddd
444

ソースコード

車輪の再発明だけど、コードは結構きれいに書けたと思う。transposeがお気に入り。

#! /opt/local/bin/ruby -w
# -*- mode:ruby; coding:utf-8 -*-
#
# paste.rb -
#
# Copyright(C) 2007 by mzp
# Author: MIZUNO Hiroki <hiroki1124@gmail.com> 
# http://mzp.sakura.ne.jp/
#
# Timestamp: 2007/08/28 20:55:40
#
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Ruby itself.
#

def max_size(arrays)
  arrays.map{|item| item.size }.max
end

def fill(arrays,size,value='')
  arrays.map{|array|
    span = [value] * (size - array.size)
    array + span
  }
end

contents = ARGV.map{|path| IO.readlines path}
filled = fill(contents,max_size(contents))

filled.transpose.map{|lines|
  puts lines.map{|line| line.chomp }.join("\t")
}