DISCLAIMER
This script is as is. I give no warranty it will work as you expected on your system. You are running it at your own risk. If something goes wrong because of this script, I bear no responsibility.
Language
server# ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
Purpose
You know the initial hexadecimal dev id. You want to assign a fixed number of devices to each node in a say 8 node cluster. print_range.rb will do it for you. It will display those many number of devices per line, one line per node.
Usage
# print_range.rb 1234 4 3
1234,1235,1236
1237,1238,1239
123A,123B,123C
123D,123E,123F
# cat print_range.rb
#!/usr/local/bin/ruby
# A script to display next NN hex numbers given at command line
# print_range.rb 21AA 4 8 (display 4 lines each line containing 8 comma separated devices)
# By Ketan Patel
# v01 - 26/05/2015
class String
def numeric?
return true if self =~ /\A\d+\Z/
end
end
class ParseInput < String
@firsthex = String.new
@lines = String.new
@numdevs = String.new
def usage
puts "Usage: print_range.rb 21AA 4 8 (display 4 lines each line containing 8 comma separated devices with first device id starting at 21AA)"
exit
end
def checkInput (input)
input.length != 3 ? ( usage ) : ( @firsthex = input[0])
input[1].numeric? ? ( @lines = input[1].to_i ) : ( puts "ERROR - Number of lines \"#{input[1]}\" is not numeric")
input[2].numeric? ? ( @numdevs = input[2].to_i ) : ( puts "ERROR - Number of devices per line \"#{input[2]}\" is not numeric")
end
def displayOutput
firstdec = @firsthex.hex
lines_temp = 1
numdev_temp = 1
@lines.times do
devstr = ""
isfirstid = "yes"
@numdevs.times do
dev = sprintf("%04X",firstdec)
isfirstid == "yes" ? ( devstr = dev; isfirstid = "no" ) : ( devstr = devstr + "," + dev )
firstdec+=1
end
puts devstr
end
end
end
ip = ParseInput.new
ip.checkInput(ARGV)
ip.displayOutput
No comments yet.