Как разделить CSV файлы в соответствии с количеством строк, указанных?


У меня есть CSV-файл (около 10 000 строк ; каждая строка имеет 300 столбцов), хранящихся на сервере LINUX. Я хочу разбить этот CSV-файл на 500 CSV-файлов по 20 записей каждый. (Каждый из которых имеет тот же заголовок CSV, что и в исходном CSV)

есть ли команда linux, чтобы помочь этому преобразованию?

4 54

4 ответа:

это работает:

tail -n +2 file.txt | split -l 20 - split_
for file in split_*
do
    head -n 1 file.txt > tmp_file
    cat $file >> tmp_file
    mv -f tmp_file $file
done

найдено на: http://edmondscommerce.github.io/linux/linux-split-file-eg-csv-and-keep-header-row.html

используйте команду разделения Linux:

split -l 20 file.txt new    

разбить файл файл".txt "в файлы, начинающиеся с имени "new", каждый из которых содержит по 20 строк текста.

тип man split в строке Unix для получения дополнительной информации. Однако вам придется сначала удалить заголовок из файла.тхт (с помощью tail command, например), а затем добавьте его обратно в каждый из разделенных файлов.

Это должно сделать это за вас - все ваши файлы будут называться Part1-Part500.

#!/bin/bash
FILENAME=10000.csv
HDR=$(head -1 $FILENAME)   # Pick up CSV header line to apply to each file
split -l 20 $FILENAME xyz  # Split the file into chunks of 20 lines each
n=1
for f in xyz*              # Go through all newly created chunks
do
   echo $HDR > Part${n}    # Write out header to new file called "Part(n)"
   cat $f >> Part${n}      # Add in the 20 lines from the "split" command
   rm $f                   # Remove temporary file
   ((n++))                 # Increment name of output part
done

Это должно работать !!!

file_name = имя файла, который вы хотите разделить.
10000 = количество строк каждый разделенный файл будет содержать
file_part_ = префикс имени разделенного файла (file_part_0, file_part_1, file_part_2..и так далее)

split-d-l 10000 имя_файла.csv file_part_