我有一个文件,内容是这样的:
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。我怎么能这样做?
答案 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]
保持在每个打印行的开头。