Команда Shell для разделения большого файла на 10 файлов меньшего размера

У меня есть файл импорта csv с 33 миллионами строк, которые необходимо импортировать в мою базу данных. Я могу импортировать его с помощью консольного приложения С#, а затем хранимых процедур, которые запускаются после таймаута импорта. Следовательно, я хочу разбить файл на 10 меньших файлов.

Я мог бы сделать это на С#, но я подозреваю, что есть гораздо лучший подход с использованием утилит оболочки. Я установил cygwin и могу использовать все обычные утилиты оболочки Linux. Есть ли небольшая комбинация команд, которые я мог бы использовать для разделения файла?

Ответ 1

Используйте split - например. разделить файл каждые 3,4 миллиона строк (должно предоставить вам 10 файлов):

split -l 3400000

$man split

Ответ 2

расщепление по строке хорошо, но вы также можете разделить по размеру

создает 1MB файлы из оригинала

split -b 1024k <file_name> 

создает 1GB файлы из оригинала

split -b 1024m <file_name>

Ответ 3

Версия split в coreutils 8.8 (еще не выпущена) будет иметь команду

split -n l/10

Теперь вам нужно указать определенное количество строк в файле

Ответ 4

Если ваш файл csv имеет 500 строк для разделения двух частей (250 + 250)

скачать и установить "Терминал Cygwin"

поставить комментарий "split -l 250 filename.csv"