Как разделить большой файл по размеру, не затрагивая последнюю строку в Unix? - PullRequest
0 голосов
/ 12 декабря 2018

Например, исходный файл имеет размер 1 ГБ и 25000 строк, я хочу разделить файлы с пороговым размером 100 МБ.Мне нужны небольшие файлы с целыми строками, а не с частичной строкой в ​​1 файле и оставшейся частичной строкой в ​​другом файле из-за ограничений размера.Заранее спасибо.Пожалуйста, дайте мне знать, если мой вопрос смущает.

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Если ваша команда split поддерживает опцию -C size или --line-bytes=size (см. man split), вы можете использовать

split -C 100M inputfile
0 голосов
/ 12 декабря 2018

@ bodo's split -C - лучшее решение, но если у вас его нет, вы можете считать символы по мере использования awk и переходить к новому выходному файлу всякий раз, когда вы достигнете 100 *1024*Вывод 1024 символов.

Обратите внимание, что здесь подразумевается неявное допущение в 1 байт на символ - будьте внимательны, если используете многобайтовые символы и т. Д.

awk '{
   # Total up length of this line plus a line-feed
   t=t+length($0)+1
   # If we have reached 100MB, roll over the chunk number and zero tally
   if(t>100*1024*1024){c+=1;t=0}
   # Write current line to file "chunk-NNN.txt"
   print >> "chunk-" (c+1) ".txt"
}' YourFile.txt
0 голосов
/ 12 декабря 2018

Я не верю, что это так просто:

На моем ПК у меня есть файл с именем "prebuild.txt".Чтобы узнать размер, я делаю ls -l (это можно проанализировать):

Prompt>ls -s prebuild.txt
135868 prebuild.txt

Итак, размер составляет около 135 868 МБ.

Количество строк можно найти, используя wc -l:

Prompt>wc -l prebuild.txt
424358 prebuild.txt

Чтобы разрезать его на кусочек ± 100Mb, мне нужно знать процент:

Prompt>$ echo 100*100000/135868 | bc
73.6

Итак, мне нужно около 73,6%файла.Соответствующее количество строк:

echo 73.6*424358/100 | bc
312327,488

Просто поместите первые 312327 строк файла в файл file1.txt:

head -312327 prebuild.txt >file1.txt

Остальные можно сделать, играя с head и tail в строках напоминания исходного файла до тех пор, пока ничего не останется.

Ps Я не тестировал команды, связанные с bc (у меня не установлен bc, базовый калькулятор, установленный на моем компьютере).система).

...