#!/usr/bin/env ruby require "optimist" require "zipf" opts = Optimist::options do banner "select_from [--invert] -i < " opt :index, "Line numbers to output.", :type => :string, :short => "-i", :required => true opt :invert, "Invert selection.", :type => :bool, :short => "-j", :default => false opt :from1, "Index starting from 1.", :type => :bool, :short => "-k", :default => false end accept = {} f = File.open opts[:index] f.each_line { |line| i = line.strip.to_i accept[i] = true } i=0 if opts[:from1] i = 1 end while line = STDIN.gets if accept[i] && !opts[:invert] STDOUT.write line elsif !accept[i] && opts[:invert] STDOUT.write line end i += 1 end