У меня есть файл CSV (около 10 000 строк; каждая строка имеет 300 столбцов), хранящиеся на сервере LINUX. Я хочу разбить этот CSV-файл на 500 CSV-файлов по 20 записей в каждом. (У каждого из них тот же заголовок CSV, что и в исходном CSV)
Есть ли какая-нибудь команда Linux для помощи в этом преобразовании?
Ответы:
Сделал это функцией. Теперь ты можешь позвонить
splitCsv <Filename> [chunkSize]
Найдено на: http://edmondscommerce.github.io/linux/linux-split-file-eg-csv-and-keep-header-row.html
источник
split
, который разбивается на новые файлы каждые 20 строк длиной, с префиксомsplit_
2: итерация по новым файлам split_ *, сохраняя каждое имя в переменнойfile
, по одному 3: для каждого ... 4: записать первую строку (заголовки столбцов) из нашего исходного файла вtmp_file
5: добавить файл с разделением на 20 строк вtmp_file
6: перезаписать старый файл split_ * новымtmp_file
, чтобы сохранить заголовки столбцовecho -e "$HEADER\n$(cat $i)" > $i
излишне неэффективно. Я заменил его наsed -i -e "1i$HEADER" "$i"
.Используйте команду разделения Linux:
Разделите файл «file.txt» на файлы, начинающиеся с имени «новый», каждый из которых содержит 20 строк текста.
Введите
man split
в командной строке Unix для получения дополнительной информации. Однако вам нужно сначала удалить заголовок из file.txt (например, используяtail
команду), а затем снова добавить его в каждый из разделенных файлов.источник
wc -l
чтобы получить количество строк, затем возьмите это значение, вычтите 1 (предположим, получилосьwc -l
50) и затем запуститеtail -n 49
(в этом примере), чтобы получить все, кроме строки заголовка. Обратите внимание, чтоwc -l
учитываются символы <newline>, поэтому, если последняя строка не заканчивается символом новой строки, вы будете отключены на 1 в вашем количестве строк.tail -n +2
напечатает все строки, кроме первой.--additional-suffix=.csv
Это должно работать !!!
file_name
= Имя файла, который вы хотите разделить.10000
= Количество строк, которые должен содержать каждый разделенный файлfile_part_
= Префикс имени разделенного файла (file_part_0, file_part_1, file_part_2..etc)источник
head -200000 file.csv | split -l 10000 - new_
Это должно сработать за вас - все ваши файлы будут называться Part1-Part500.
источник
У меня есть однострочный ответ (этот пример дает вам 999 строк данных и одну строку заголовка на файл)
https://stackoverflow.com/a/53062251/401226
источник