-1

这是我用于脚本的文件的摘录:

host1 10000000c9c5acfa
host1 10000000c9fc168c
host2 10000000c9c5fb32
host2 10000000c9fc1682
host1 10000000c9c5bf4e
host1 10000000c9fc168d
host3 10000000c9534d61
host3 10000000c9534ffe
host3 10000000c9534d61
host3 10000000c9534ffe

我正在努力创建一个哈希或一个数组(不确定在这种情况下什么更好),以便我有以下格式

host1 10000000c9c5acfa,10000000c9fc168c,10000000c9c5bf4e,10000000c9fc168d
host2 10000000c9c5fb32,10000000c9fc1682
host3 10000000c9534d61,10000000c9534ffe

我希望主机在一行中显示所有 WWN,但有时主机有一个 WWN,有时有两个,有时有四个。知道如何在这里形成哈希/数组吗?

4

3 回答 3

0

你是对的:你需要一个哈希。此代码演示。

调用split文件的每一行会将其划分为空格分隔的字段。如果与主机对应的哈希元素不存在,则将其设置为空数组,然后将新代码推送到它上面。

输出是通过转储散列,按照主机名称的排序顺序,并应用于uniq相应代码列表而生成的。

open('myfile', 'r') do |f|

  data = {}

  f.each_line do |line|
    host, code = line.split
    data[host] ||= []
    data[host] << code
  end

  data.keys.sort.each do |host|
    puts "#{host} #{data[host].uniq.join(',')}"
  end

end

输出

host1 10000000c9c5acfa,10000000c9fc168c,10000000c9c5bf4e,10000000c9fc168d
host2 10000000c9c5fb32,10000000c9fc1682
host3 10000000c9534d61,10000000c9534ffe
于 2013-09-02T13:38:10.220 回答
-1

我会创建一个Hash配对host ⇒ Array[WWN]

h = {}
File.open("a.txt").each { |l|
  k,v = l.split(' ')
  (h[k] ||= []) << v
}
p h

 # ⇒ {
 # ⇒   "host1" => ["10000000c9c5acfa", "10000000c9fc168c", "10000000c9c5bf4e", "10000000c9fc168d"], 
 # ⇒   "host2" => ["10000000c9c5fb32", "10000000c9fc1682"], 
 # ⇒   "host3" => ["10000000c9534d61", "10000000c9534ffe", "10000000c9534d61", "10000000c9534ffe"]
 # ⇒ }
于 2013-09-02T13:20:29.033 回答
-1

这将起作用 - 请添加一些修复以删除每个值中的最后一个“,”:

h = {}
lines = File.readlines("a.txt")
lines.each { |line| 
  line = line.chomp
  key,value = line.split(" ")
  if(!h.has_key?(key)) 
    h[key] = ""
  end
  h[key] = h[key] + value + ","
}
print h
于 2013-09-02T13:08:49.513 回答