comm コマンドの実装

ruby で組んでみた。

require 'optparse'

visible1 = true
visible2 = true
visible3 = true

opt = OptionParser.new
opt.on("-1") {|v| visible1 = false}
opt.on("-2") {|v| visible2 = false}
opt.on("-3") {|v| visible3 = false}
opt.parse!(ARGV)

fname1 = ARGV[0]
fname2 = ARGV[1]

file1 = open(fname1)
file2 = open(fname2)

line1 = file1.gets
line2 = file2.gets

indent2 = ""
indent2 = "\t" if visible1

indent3 = ""
indent3 += "\t" if visible1
indent3 += "\t" if visible2

while (line1 != nil) or (line2 != nil)
    if (line1 == nil)
        order = 1
    elsif (line2 == nil)
        order = -1
    else
        order = line1 <=> line2
    end
    if (order == 0)
        print indent3 + line1 if visible3
    elsif (order > 0)
        print indent2 + line2 if visible2
    else
        print line1 if visible1
    end
    line2 = file2.gets if (order >= 0)
    line1 = file1.gets if (order <= 0)
end

file1.close
file2.close