我有一个制表符分隔文件,其中前 10 列始终存在并保持在同一位置,但在第 10 列之后,列数可以更改。我想按原样保留前 10 列,并将其余列连接成一列,以|
.
这是示例数据:
列: col1 col2 ... col 10 col11 col12 col13
值:1 2 ... 10 11 12 13
结果:
列: col1 col2 ... col10 col11|col12|col13
值:1 2 ... 10 11 | 12 | 13
我有一个制表符分隔文件,其中前 10 列始终存在并保持在同一位置,但在第 10 列之后,列数可以更改。我想按原样保留前 10 列,并将其余列连接成一列,以|
.
这是示例数据:
列: col1 col2 ... col 10 col11 col12 col13
值:1 2 ... 10 11 12 13
结果:
列: col1 col2 ... col10 col11|col12|col13
值:1 2 ... 10 11 | 12 | 13
你可以从类似的东西开始
IO.foreach('path/to/file') do |line|
splits = line.split("\t")
col1, col2, col3, col4, col5, col6, col7, col8, col9, col10 = splits
col11 = splits[10..-1].join('|')
end
看看 ruby 的split方法——它有一个可选limit
参数。假设您的数据在row
每一行的变量中:
values = row.split("\t", 11)
示例(为简洁起见,可变部分从第 3 列开始):
s = "1\t2\t3\t4"
cols = s.split("\t", 3)
# result: ["1", "2", "3\t4"]
然后您可以更改最后一个元素:
cols[2] = cols.last.gsub("\t", "|")
# cols is now: ["1", "2", "3|4"]