2014-11-11 4 views
1

У меня есть файл TSV следующим образом. (Ну, это сохраняется как csv). Он был создан путем запуска пасты на 2 файла и сохранения вывода в другом файле. Поэтому столбцы фактически разделены вкладками.Обработка TSV с Ruby

Это этот файл структура

Quantity1 Value1 Value2 Value3 ...Valuen 
Quantity2 Value1 Value2 Value3 ...ValueN 
.... 
.... 
Quantityn Value1 Value2 Value3 ...Valuen 

Я хочу добавить только 3 более столбцов в файле, который распечатает мин, макс, и 90-й процентиль каждой строки в 3-х столбцов в конце.

Поскольку файлы были созданы с помощью сценария Ruby, я полагал, что они также должны быть обработаны с помощью рубинового сценария

ответ

3

Вам нужно прочитать файл, добавьте необходимые столбцы для каждой строки, и записать его снова, что-то вроде этого:

CSV.open('path_to_new_file.csv', 'wb', col_sep: "\t") do |new_csv| 
    CSV.foreach('path_to_src_file.csv', col_sep: "\t") do |row| 
    sorted_values = row[1..-1].sort 
    min = sorted_values.first 
    max = sorted_values.last 
    ninetieth_percentile = sorted_values[(sorted_values.length * 0.9).floor] 
    new_csv << row + [min, max, ninetieth_percentile] 
    end 
end 

Для получения дополнительной информации об обработке томов CSV в рубин, см here

+0

Спасибо Uri :) –

+0

на самом деле не должно быть nintieth процентиль 'ninetieth_percentile = Sorte d_values ​​[((sorted_values.length * 0.9) .ceil) -1] ' потому что индексы отсортированных валов начинаются с 0, а не 1? –

+0

@SrinivasSuresh - Я думаю, вы правы. Я изменил его с '.ceil' на' .floor' ... –

Смежные вопросы