Как легко разбить текстовый файл на части меньше порога?
У меня есть некоторые текстовые файлы длиной от 100 до 300 МБ, которые я хочу просмотреть в Emacs, но мой Emacs сталкивается с некоторыми проблемами с производительностью, открывая и просматривая такие большие файлы. Поэтому я ищу простую утилиту для разделения файла на управляемые куски, скажем, по 50 МБ каждый, и для именования чанков на основе исходного имени и некоторого суффикса для указания их расположения в последовательности. Каждый чанк будет урезан в том месте, где был обрезан предыдущий, и будет не длиннее 50 МБ, а последний чанк может быть короче.
Есть ли какой-нибудь простой инструмент для такой работы на компьютере с Linux, возможно, что-то вроде головы или хвоста, дающее несколько результатов, по одному на каждый кусок?
например, данный файл test.out
это 120 МБ, разбейте его на test.out.1
за первые 50 МБ, test.out.2
за вторые 50 МБ и test.out.3
для оставшихся 20 МБ в конце файла.
Я мог бы использовать комбинации head
а также tail
чтобы получить кусочки, но мне нужен инструмент, который абстрагирует все это, возможно, скрипт Perl или скрипт Python, который кто-то уже создал для выполнения такой задачи?
1 ответ
Для этого уже есть хороший инструмент: split
> человек 1 сплит НАЗВАНИЕ split - разбить файл на части СИНТАКСИС split [-l line_count] [-a суффикс_длина] [файл [префикс]] split -b byte_count[K|k|M|m|G|g] [-a суффикс_длина] [файл [префикс]] шаблон split -p [-a суффикс_длина] [файл [префикс]]
split --bytes 50M test.out test.out_
разбил бы файл test.out
в test.out_xaa, test.out_xab, test.out_xac, ...
Гораздо более уродливым решением было бы использовать dd
dd if=test.out of=test.out.part1 bs=1M count=50 skip=0
создает файл с именем test.out.part1 с первыми 50M из test.out. Вы можете увеличить значение для skip до 1, чтобы получить второй блок, до 2 для третьего и т. Д. И т. Д. Просто убедитесь, что вы также изменили имена файлов, иначе вы перезапишете тот же выходной файл.