Я полагаю, что вы запрашиваете "любое более быстрое решение" разрешает не-Python решения, поэтому я бы предложил awk
.
Я создал 4 файла из 1000 строк фиктивных данных, напримерthis:
for ((i=0;i<4;i++)) ; do
perl -E 'for($i=0;$i<1000;$i++){say "Line $i,field2,field3,",int rand 250}' | gzip > $i.gz
done
Вот несколько первых строк одного из файлов.Четвертое поле варьируется от 0..250 и должно быть похоже на ваше id
поле.
Line 0,field2,field3,81
Line 1,field2,field3,118
Line 2,field2,field3,56
Line 3,field2,field3,184
Line 4,field2,field3,156
Line 5,field2,field3,87
Line 6,field2,field3,118
Line 7,field2,field3,59
Line 8,field2,field3,119
Line 9,field2,field3,183
Line 10,field2,field3,90
Тогда вы можете обработать так:
gunzip -c *gz | awk -F, '{ id=$4; print > id ".csv" }'
То есть ... "Разархивируйте все файлы .gz
, не удаляя их, и передайте результаты в awk
. В awk
разделитель полей - запятая. id
должен быть выбран из 4-го поля каждой строкиКаждая строка должна быть напечатана в выходной файл с именем id
, за которым следует .csv
".
Вы должны получить 250 CSV-файлов ... довольно быстро.
Примечание : Если у вас заканчиваются дескрипторы открытых файлов, возможно, вам придется увеличить лимит.Попробуйте выполнить следующие команды:
help ulimit
ulimit -n 500