Как разбить CSV файлы в соответствии с указанным числом строк?
У меня есть файл CSV (около 10 000 строк, каждая строка из 300 столбцов), хранящаяся на сервере LINUX.
Я хочу разбить этот CSV файл на 500 файлов CSV по 20 записей. (Каждый из них имеет тот же заголовок CSV, что и в исходном CSV)
Есть ли какая-нибудь команда linux, чтобы помочь в этом преобразовании?
Ответы
Ответ 1
Сделано это в функцию. Теперь вы можете вызвать splitCsv <Filename> [chunkSize]
splitCsv() {
HEADER=$(head -1 $1)
if [ -n "$2" ]; then
CHUNK=$2
else
CHUNK=1000
fi
tail -n +2 $1 | split -l $CHUNK - $1_split_
for i in $1_split_*; do
echo -e "$HEADER\n$(cat $i)" > $i
done
}
Найдено по адресу: http://edmondscommerce.github.io/linux/linux-split-file-eg-csv-and-keep-header-row.html
Ответ 2
Используйте команду разделения Linux:
split -l 20 file.txt new
Разделите файл "file.txt" на файлы, начинающиеся с имени "новый", каждый из которых содержит по 20 строк текста.
Введите man split
в приглашении Unix для получения дополнительной информации. Однако вам сначала нужно удалить заголовок из файла file.txt(например, с помощью команды tail
), а затем добавить его обратно в каждый из разделенных файлов.
Ответ 3
Это должно сделать это для вас - все ваши файлы в конечном итоге называются 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
Ответ 4
Это должно работать !!!
file_name
= имя файла, который вы хотите разделить.
10000
= количество строк в каждом файле разделения
file_part_
= Префикс имени разделяемого файла (file_part_0, file_part_1, file_part_2..etc продолжается)
split -d -l 10000 имя_файла .csv file_part_