我有一个文件,内容是这样的:
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;%sn",$1,$n); }}' input.txt
但现在我正在尝试用 Ruby 这样做。我该怎么做?
这可以解决问题:
IO.readlines("input.txt").each do |line|
num, *data = line.strip.split(/[;,]/)
data.each do |s|
puts "#{num};#{s}"
end
end
请注意,@evfwcqcg和我都在考虑很可能是拼写错误的内容,即逗号作为第一行的记录分隔符。
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
我假设您将其作为文本文件读取到脚本中是否正确?为了帮助您入门,File.open(textfile).each do (code code code) end
从那里,看看evfwcqcg通过像这样拆分行来表达什么:
File.open(textfile).each do |line|
x = line.split(/[;,]/)
end
我认为。我不太确定,但我认为这个论点是正则表达式??请有人解释。然后,这会将行分解为自己的数组(一次一个)。从那里,您只需循环浏览它们,将line[0]
保持在每行打印行的开头。