0

(タイトルをもっと適切なものに変更してください!)

Ruby/ERB に関する別の質問がありました。私はこのファイルを持っています:

ec2-23-22-59-32, mongoc, i-b8b44, instnum=1, Running
ec2-54-27-11-46, mongod, i-43f9f, instnum=2, Running
ec2-78-62-192-20, mongod, i-02fa4, instnum=3, Running
ec2-24-47-51-23, mongos, i-546c4, instnum=4, Running
ec2-72-95-64-22, mongos, i-5d634, instnum=5, Running
ec2-27-22-219-75, mongoc, i-02fa6, instnum=6, Running

そして、ファイルを処理して、次のような配列を作成できます。

irb(main):007:0> open(inFile).each { |ln| puts ln.split(',').map(&:strip)[0..1] }
ec2-23-22-59-32
mongoc
ec2-54-27-11-46
mongod
....
....

しかし、私が本当に欲しいのは、次のようになるように「mongo-type」に連結された出現数です。

ec2-23-22-59-32
mongoc1
ec2-54-27-11-46
mongod1
ec2-78-62-192-20
mongod2
ec2-24-47-51-23
mongos1
ec2-72-95-64-22
mongos2
ec2-27-22-219-75
mongoc2

各モンゴタイプの数は固定ではなく、時間とともに変化します。どうすればそれを行うことができますか?前もって感謝します。乾杯!!

4

1 に答える 1

1

簡単な回答(おそらく最適化できます):

data = 'ec2-23-22-59-32, mongoc, i-b8b44, instnum=1, Running
ec2-54-27-11-46, mongod, i-43f9f, instnum=2, Running
ec2-78-62-192-20, mongod, i-02fa4, instnum=3, Running
ec2-24-47-51-23, mongos, i-546c4, instnum=4, Running
ec2-72-95-64-22, mongos, i-5d634, instnum=5, Running
ec2-27-22-219-75, mongoc, i-02fa6, instnum=6, Running'

# a hash where we will save mongo types strings as keys
# and number of occurence as values
mtypes = {}
data.lines.each do |ln|
  # get first and second element of given string to inst and mtype respectively
  inst, mtype = ln.split(',').map(&:strip)[0..1]
  # check if mtypes hash has a key that equ current mtype
  # if yes -> add 1 to current number of occurence
  # if not -> create new key and assign 1 as a value to it
  # this is a if ? true : false -- ternary operator
  mtypes[mtype] = mtypes.has_key?(mtype) ? mtypes[mtype] + 1 : 1
  # combine an output string (everything in #{ } is a variables
  # so #{mtype}#{mtypes[mtype]} means take current value of mtype and
  # place after it current number of occurence stored into mtypes hash
  p "#{inst} : #{mtype}#{mtypes[mtype]}"
end

出力:

# "ec2-23-22-59-32 : mongoc1"
# "ec2-54-27-11-46 : mongod1"
# "ec2-78-62-192-20 : mongod2"
# "ec2-24-47-51-23 : mongos1"
# "ec2-72-95-64-22 : mongos2"
# "ec2-27-22-219-75 : mongoc2"

かなり率直だと思います。何かわからないことがあれば、教えてください。

于 2013-07-17T13:11:32.613 に答える