デカくなりすぎたテキストファイルを分割するスクリプトを書いてみた。
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
たぶん例外処理がイマイチ・・・