将行拆分为列

时间:2012-08-09 02:26:36

标签: ruby

我有一个文件,内容是这样的:

first;48548a;48954a,48594B
second;58757a;5875b
third;58756a;58576b;5867d;56894d;45864a

我想改变这样的格式:

first;48548a
first;48954a
first;48594B
second;58757a
second;5875b
third;58756a
third;58576b
third;5867d
third;56894d
third;45864a

在Bash中,我可以使用此cmmand实现它:

awk -F\; '{for(n=2; n<=NF; n++) { printf("%s;%s\n",$1,$n); }}' input.txt

但现在我正在尝试使用Ruby。我怎么能这样做?

3 个答案:

答案 0 :(得分:4)

这就是诀窍:

IO.readlines("input.txt").each do |line|
  num, *data = line.strip.split(/[;,]/)
  data.each do |s|
    puts "#{num};#{s}"
  end
end

请注意,@ evfwcqcg和我都在考虑可能是拼写错误,逗号作为第一行的记录分隔符。

答案 1 :(得分:2)

s = <<-STR
first;48548a;48954a,48594B
second;58757a;5875b
third;58756a;58576b;5867d;56894d;45864a
STR

def disp(number, *elems)
  puts elems.map { |e| "#{number};#{e}" }
end

ar = s.split.each {|x| disp(*x.split(/[;,]/)) }

# => first;48548a
# => first;48954a
# => first;48594B
# => second;58757a
# => second;5875b
# => third;58756a
# => third;58576b
# => third;5867d
# => third;56894d
# => third;45864a

答案 2 :(得分:0)

假设您将此作为文本文件读入脚本,我是否正确?为了帮助您入门,File.open(textfile).each do (code code code) end 从那里开始,看看evfwcqcg如何分割这样的行:

File.open(textfile).each do |line| x = line.split(/[;,]/) end

我想。我不太确定,但我认为这个论点是正则表达式?请有人解释一下。然后,将线分成他们自己的数组(一次一个)。从那里,你只需循环遍历它们,将line[0]保持在每个打印行的开头。