Я бы не сделал этого в Ruby, если ваши записи являются истинными дубликатами. Вместо этого, воспользоваться существующими инструментами в ОС, для этого:
cat *.csv | sort -u >unique.csv
Когда закончите, «unique.csv» будет содержать уникальные записи.
Если вы настаиваете на написании его в Ruby, воспользуйтесь встроенными методами или классами. Вот один непроверенный способ сделать это:
require 'set'
unique = Set.new
Dir.glob('*.csv') do |f|
File.foreach(f) { |l| unique << l }
end
File.write('unique.csv', unique.sort.join)
Это работает, чтобы создать уникальный выход, потому что наборы не допускает дубликатов.
Альтернативный способ сделать что-то вроде:
unique = []
Dir.glob('*.csv') do |f|
unique += File.readlines(f)
end
File.write('unique.csv', unique.sort.uniq.join)
В то время как Руби может сделать это, используя операционную систему, чтобы справиться с гораздо более масштабируемым. YMMV.
Я попытался запустить кошку * .csv | sort - u> unique.csv в ОС, но в итоге некоторые значения ошибочно вошли в неправильные столбцы.
Я создал три файла на моем диске:
$ cat file1.csv
1 joe red
2 bill blue
3 bob green
$ cat file2.csv
3 bob green
4 mary white
5 jim yellow
$ cat file3.csv
5 jim yellow
6 lauren pink
7 george purple
Бег cat *.csv | sort -u >unique.csv
и глядя на полученный файл показывает:
$ cat unique.csv
1 joe red
2 bill blue
3 bob green
4 mary white
5 jim yellow
6 lauren pink
7 george purple
Дубликаты удаляются, и файл идентичен входным образцам, которые вы дали. Ваш «file3.csv» показывает дополнительное пространство в последних линиях, нажав верхний столбец справа.
Примечание: Ваши файлы NOT CSV-файлы. CSV означает «значения, разделенные запятыми», и между вашими столбцами нет запятых. Возможно, изначально у вас был TSV («значения, разделенные табуляцией»), которые Ruby CSV-класс может читать и писать, или у вас есть столбцы фиксированной ширины и каким-то образом добавлено дополнительное пространство. Очень важно использовать правильную терминологию и делать это последовательно, особенно при задании вопросов.
Это не файлы CSV. Скорее всего, они фиксированные, но могут быть TSV, хотя ваш третий образец имеет перекошенные столбцы для последних двух записей. –