У меня есть XML-файл размером 150 ГБ, который я хотел бы сократить (т. е. обрезать) примерно до 1 ГБ. Есть ли простая команда (bash или подобная), которую я могу использовать, или мне придется пойти программным путем (редактирование в vi или emacs — это кошмар даже на мощных железных системах)?
(Меня не особенно беспокоит потеря информации, мне нужен более короткий файл, чтобы я мог протестировать часть программного обеспечения на нем и не ждать много часов ответа; более короткий файл позволит мне это сделать.)
решение1
Предположим, вы хотите обрезать и извлечь первый 1 ГБ из файла размером 150 ГБ:
С head
:
head -c 1G infile > outfile
Обратите внимание, что G
суффикс можно заменить на , GB
чтобы выровнять по 1000 вместо 1024.
Или с dd
:
dd if=infile of=outfile bs=1M count=1024
Или, как в ответе Вампуса Кью. Уомбли, dd
можно обрезать на месте.
решение2
решение3
Где возможно, я бы использовал truncate
команду, как в ответе Джона1024. Это не стандартная команда unix, так что вы можете когда-нибудь обнаружить, что не можете ее использовать. В этом случае dd
можно также сделать усечение на месте.
dd
По умолчанию функция обрезает выходной файл в точке, где заканчивается копирование, поэтому вы просто передаете ей входной файл нулевой длины и указываете начать запись с желаемой точки обрезания:
dd if=/dev/null of=filename bs=1048576 seek=1024
(Это не то же самое, что копирование и усечение dd
в ответе multithr3at3d.)
Обратите внимание, что я использовал 1048576 и 1024, потому что 1048576*1024 — это желаемый размер. Я избегал bs=1m, потому что это ответ «переносимости», а classic dd
знает только суффиксы k
, b
, и w
.
решение4
Вы можете использовать split
команду.
split -C 1G <filename>
Для более подробной информации взгляните на этоответ на stackoverflow