$ cat j4.csv
how, now, brown, cow, f1
now, is, the, time, f2
one, two, three, four, five
xhow, now, brown, cow, f1
xnow, is, the, time, f2
xone, two, three, four, five
$ cat j4a.csv
how, b
one, d
$ cat hj.rb
require 'pp'
require 'rubygems'
require 'fastercsv'
pp(
FasterCSV.read('j4a.csv').inject(
FasterCSV.read('j4.csv').inject({}) do |m, e|
m[e[0]] = e
m
end) do |m, e|
k = e[0]
m[k] << e.last if m[k]
m
end.values)
$ ruby hj.rb
[["now", " is", " the", " time", " f2"],
["xhow", " now", " brown", " cow", " f1"],
["xone", " two", " three", " four", " five"],
["how", " now", " brown", " cow", " f1", " b"],
["one", " two", " three", " four", " five", " d"],
["xnow", " is", " the", " time", " f2"]]
Это работает, отображая ваш мастер-файл в хеш с ключом один столбец, а затем он просто ищет ключ из других ваших файлов.Как написано, код добавляет последний столбец, когда ключи совпадают.Поскольку у вас есть несколько неосновных файлов, вы можете адаптировать концепцию, заменив FasterCSV.read('j4a.csv')
методом, который читает каждый файл и объединяет их все в один массив массивов, или вы можете просто сохранить результат из внутреннего inject
(главный хеш) и применить к нему каждый файл в цикле.