デカくなりすぎたテキストファイルを分割するスクリプトを書いてみた。

Debugログが数GBになったので。

#!/usr/bin/env ruby
require 'optparse'
Version=0.3

# 分割対象ファイル
file_path=nil
# 出力先ディレクトリ
dest_dir=nil
# 分割単位(行)
line_size=100000

OptionParser.new {|opt|
  opt.on('-f','--file file_path',String,"分割したいテキストファイル"){|v|
    file_path=File.expand_path(v)
  }
  opt.on('-d','--dest dest_dir',String,"分割したファイルを作成したいディレクトリ"){|v|
    dest_dir=File.expand_path(v)
  }
  opt.on('-l','--line line_size',Integer,"分割単位(デフォルト=>#{line_size}行)"){|v|
    line_size=v
  }
  opt.parse!(ARGV)
}

# 分割対象ファイルが指定されなければ終了
exit 1 if file_path.nil?

# 出力ディレクトリが指定されなければ、入力ディレクトリに出力
dest_dir=File.dirname(file_path) if dest_dir.nil?
dest_dir+="/"+File.basename(file_path,File.extname(file_path))
ext_name=File.extname(file_path)
lines=0
open(file_path) {|file|
  while line=file.gets
    begin
      dest_file=dest_dir+"_"+(lines/line_size).to_s+ext_name
      dest=open(dest_file,"a") if dest.nil?||dest.closed?
      dest.write line
      lines+=1
      dest.close if 0==lines%line_size 
    rescue
      dest.close if !dest.nil?
    end 
  end
}
puts lines 

たぶん例外処理がイマイチ・・・