ファイルのマージ(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") }