Объединение содержимого нескольких CSV-файлов в один файл .csv

Я хочу написать скрипт, который объединяет содержимое нескольких CSV-файлов в один CSV-файл, т.е. добавляет столбцы всех других файлов в столбцы первого файла. Я попытался сделать это, используя цикл «для», но не смог продолжить его.

Кто-нибудь знает, как это сделать в Linux?

2 Solutions collect form web for “Объединение содержимого нескольких CSV-файлов в один файл .csv”

Вот скрипт perl, который читает в каждой строке каждого файла, указанного в командной строке, и добавляет его к элементам в массиве ( @csv ). Когда ввода больше нет, он выводит каждый элемент @csv .

Файлы .csv будут добавляться в том порядке, в котором они указаны в командной строке.

ПРЕДУПРЕЖДЕНИЕ . Этот сценарий предполагает, что все входные файлы имеют одинаковое количество строк . Вывод, вероятно, будет непригодным, если какой-либо файл имеет другое количество строк от любого другого.

 #!/usr/bin/perl use strict; my @csv=(); foreach (@ARGV) { my $linenum=0; open(F,"<",$_) or die "couldn't open $_ for read: $!\n"; while (<F>) { chomp; $csv[$linenum++] .= "," . $_; }; close(F); }; foreach (@csv) { s/^,//; # strip leading comma from line print $_,"\n"; }; 

Учитывая следующие входные файлы:

 ==> 1.csv <== 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 ==> 2.csv <== 5,6,7,8 5,6,7,8 5,6,7,8 5,6,7,8 ==> 3.csv <== 9,10,11,12 9,10,11,12 9,10,11,12 9,10,11,12 

он будет производить следующий вывод:

 $ ./mergecsv.pl *.csv 1,2,3,4,5,6,7,8,9,10,11,12 1,2,3,4,5,6,7,8,9,10,11,12 1,2,3,4,5,6,7,8,9,10,11,12 1,2,3,4,5,6,7,8,9,10,11,12 

Хорошо, теперь, когда вы прочли это, пришло время признать, что это не делает ничего, что не paste -d, *.csv . Так зачем беспокоиться о perl? paste довольно негибкая. Если ваши данные в точности соответствуют тому, что делает paste , вы хороши – это идеально подходит для работы и очень быстро. Если нет, это совершенно бесполезно для вас.

Существует несколько способов улучшения такого Perl-скрипта (например, обработка файлов разной длины путем подсчета количества полей для каждого файла и добавления правильного количества пустых полей в @csv для каждого файла (ов), который отсутствуют строки или, по крайней мере, обнаруживают разные длины и выходят с ошибкой), но это разумная отправная точка, если требуется более сложное слияние.

BTW, это использует действительно простой алгоритм и сохраняет все содержимое всех входных файлов в памяти (в @csv ) сразу. Для файлов до нескольких МБ каждый в современной системе это не является необоснованным. Если, однако, вы обрабатываете HUGE .csv-файлы, лучшим алгоритмом будет:

  • откройте все входные файлы и, хотя есть еще данные для чтения:
    • читать строку из каждого файла
    • добавьте строки (в порядке @ARGV)
    • распечатать прилагаемую строку

Самый простой способ достижения этой цели – ввести следующую команду

 cat *csv > combined.csv 

Этот файл будет содержать содержимое всех ваших файлов csv именно так, как вы упомянули.

  • Если сравнение строк оператора
  • awk, когда оба разделителя и кавычки используются для поля
  • Calc добавляет '(апостроф) при импорте времени из CSV
  • Реструктуризация CSV-файла
  • Может ли python извлекать таблицы org-mode из документов org?
  • Быстрый способ удалить строку из чрезвычайно большого файла
  • Изменение столбца нескольких файлов csv
  • Читайте только новые части файла?
  • Как объединить все CSV S в один CSV в порядке
  • Конвертировать вкладку Separated csv с помощью unoconv
  • Печать / экспорт csv-файла в массив
  • Interesting Posts

    Ctrl-Alt-F1 не работает с X

    Переконфигурируйте вход через root ftp (потерянный ssh-доступ)

    Как предотвратить преждевременное выполнение $ () при создании псевдонима

    MC (Midnight Commander) Полный путь в строке заголовка внутреннего редактора

    Не удается смонтировать жесткий диск EXT4 после установки в окнах

    Поведение POSIX привязок sed и $ regex с многострочными пространствами шаблонов

    Какие файловые системы поддерживают резервное копирование моментальных снимков из живой системы?

    скрипт upstart, который запускает другой скрипт, постоянно запускающий

    Извлечение аудио из видео без преобразования в пользовательских действиях Thunar

    Панель запуска приложений с сеткой, например, горячие клавиши

    изменение домашнего каталога пользователя не влияет

    xfce4-терминал раздражает нижнюю и правую границу

    Почему необходимо скомпилировать все ядро ​​для простого патча?

    Можно ли сохранить вывод предыдущей команды в файле?

    Как я могу обновить ОС на Iphone на машине Linux?

    Linux и Unix - лучшая ОС в мире.