Команда split в Linux позволяет разбивать файлы на несколько файлов. Есть несколько способов настроить параметры для вашего приложения. Мы покажем вам несколько примеров команды split, которые помогут вам понять ее использование.
Обратите внимание, что мы не будем отображать вывод напрямую в этих примерах из-за больших размеров файлов. Мы будем использовать команды ll и wc для выделения изменений файла.
Мы советуем вам быстро взглянуть на команду wc, чтобы понять вывод примеров команды split.
Синтаксис команды Split:
split [options] filename [prefix]
Давайте посмотрим, как использовать его для разделения файлов в Linux.
По умолчанию команда split создает новые файлы для каждых 1000 строк. Если префикс не указан, он будет использовать ‘x’. Следующие буквы перечисляют файлы, поэтому сначала идет xaa, затем xab и так далее.
Давайте разделим пример файла журнала:
split AndreyExLogFile.log
Если вы используете команду ls, вы можете увидеть несколько новых файлов в вашем каталоге.
andreyex@destroyer:~/Documents$ ls AndreyExLogFile.log xab xad xaf xah xaj xal xan xap xar xaa xac xae xag xai xak xam xao xaq
Вы можете использовать wc для быстрой проверки количества строк после разделения.
andreyex@destroyer:~/Documents$ wc -l xaa xaq xar 1000 xaa 1000 xaq 170 xar
Помните, что ранее мы видели, что наш исходный файл содержал 17 170 строк. Таким образом, мы можем видеть, что наша программа создала как и ожидалось, 18 новых файлов. 17 из них заполнены 1000 строками в каждой, а последняя имеет оставшиеся 170 строк.
Другой способ продемонстрировать, что происходит, — запустить команду с параметром verbose. Если вы не знакомы с verbose, вы пропускаете! Он предоставляет более подробные отзывы о том, что делает ваша система, и он доступен для использования со многими командами.
split AndreyExLogFile.log --verbose
Вы можете увидеть, что происходит с вашей командой на дисплее:
creating file 'xaa' creating file 'xab' creating file 'xac' creating file 'xad' creating file 'xae' creating file 'xaf' creating file 'xag' creating file 'xah' creating file 'xai' creating file 'xaj' creating file 'xak' creating file 'xal' creating file 'xam' creating file 'xan' creating file 'xao' creating file 'xap' creating file 'xaq' creating file 'xar'
Мы понимаем, что вам может не понравиться, что файлы разбиты на файлы по 1000 строк. Вы можете изменить это поведение с помощью опции -l.
Теперь вы можете указать, сколько строк вы хотите в каждом из новых файлов.
split AndreyExLogFile.log -l 500
Как вы можете догадаться, теперь разделенные файлы имеют по 500 строк каждая, кроме последней.
andreyex@destroyer:~/Documents$ wc -l xbh xbi 500 xbh 170 xbi
Теперь у вас есть намного больше файлов, но с половиной строк в каждом.
Опция -n делает разделение на указанное число частей или кусков. Вы можете назначить, сколько файлов вы хотите, добавив целочисленное значение после -n.
split AndreyExLogFile.log -n 15
Теперь вы можете видеть, что есть 15 новых файлов.
andreyex@destroyer:~/Documents$ ls AndreyExLogFile.log xaa xab xac xad xae xaf xag xah xai xaj xak xal xam xan xao
Что делать, если вы хотите использовать split, но оставить оригинальное имя моего файла или вообще создать новое имя вместо ‘x’?
Возможно, вы помните, что видели префикс как часть синтаксиса, описанного в начале статьи. Вы можете написать свое собственное имя файла после исходного файла.
split AndreyExLogFile.log AndreyExSeparatedLogFiles.log_
Вот разделенные файлы с именами, начинающимися с данного префикса.
andreyex@destroyer:~/Documents$ ls AndreyExLogFile.log AndreyExSeparatedLogFiles.log_aj AndreyExSeparatedLogFiles.log_aa AndreyExSeparatedLogFiles.log_ak AndreyExSeparatedLogFiles.log_ab AndreyExSeparatedLogFiles.log_al AndreyExSeparatedLogFiles.log_ac AndreyExSeparatedLogFiles.log_am AndreyExSeparatedLogFiles.log_ad AndreyExSeparatedLogFiles.log_an AndreyExSeparatedLogFiles.log_ae AndreyExSeparatedLogFiles.log_ao AndreyExSeparatedLogFiles.log_af AndreyExSeparatedLogFiles.log_ap AndreyExSeparatedLogFiles.log_ag AndreyExSeparatedLogFiles.log_aq AndreyExSeparatedLogFiles.log_ah AndreyExSeparatedLogFiles.log_ar AndreyExSeparatedLogFiles.log_ai
Разделение имеет длину суффикса по умолчанию 2 [aa, ab и т. д.]. Это изменится автоматически при увеличении количества файлов, но если вы хотите изменить его вручную, это тоже возможно. Допустим, вы хотите, чтобы наши файлы были названы как-то вроде AndreyExSeparatedLogFiles.log_aaaab.
Как ты можешь это сделать? Опция -a позволяет нам указать длину суффикса.
split AndreyExLogFile.log AndreyExSeparatedLogFiles.log_ -a 5
И вот разделенные файлы:
andreyex@destroyer:~/Documents$ ls AndreyExLogFile.log AndreyExSeparatedLogFiles.log_aaaae AndreyExSeparatedLogFiles.log_aaaaj AndreyExSeparatedLogFiles.log_aaaao AndreyExSeparatedLogFiles.log_aaaaa AndreyExSeparatedLogFiles.log_aaaaf AndreyExSeparatedLogFiles.log_aaaak AndreyExSeparatedLogFiles.log_aaaap AndreyExSeparatedLogFiles.log_aaaab AndreyExSeparatedLogFiles.log_aaaag AndreyExSeparatedLogFiles.log_aaaal AndreyExSeparatedLogFiles.log_aaaaq AndreyExSeparatedLogFiles.log_aaaac AndreyExSeparatedLogFiles.log_aaaah AndreyExSeparatedLogFiles.log_aaaam AndreyExSeparatedLogFiles.log_aaaar AndreyExSeparatedLogFiles.log_aaaad AndreyExSeparatedLogFiles.log_aaaai AndreyExSeparatedLogFiles.log_aaaan
До этого момента вы видели, что ваши файлы разделены с использованием различных буквенных комбинаций. Лично нам гораздо проще различать файлы по номерам.
Давайте сохраним длину суффикса из предыдущего примера, но изменим алфавитную организацию на числовую с помощью опции -d.
split AndreyExLogFile.log AndreyExSeparatedLogFiles.log_ -a 5 -d
Так что теперь у вас будут разделенные файлы с числовыми значениями.
andreyex@destroyer:~/Documents$ ls AndreyExLogFile.log AndreyExSeparatedLogFiles.log_00004 AndreyExSeparatedLogFiles.log_00009 AndreyExSeparatedLogFiles.log_00014 AndreyExSeparatedLogFiles.log_00000 AndreyExSeparatedLogFiles.log_00005 AndreyExSeparatedLogFiles.log_00010 AndreyExSeparatedLogFiles.log_00015 AndreyExSeparatedLogFiles.log_00001 AndreyExSeparatedLogFiles.log_00006 AndreyExSeparatedLogFiles.log_00011 AndreyExSeparatedLogFiles.log_00016 AndreyExSeparatedLogFiles.log_00002 AndreyExSeparatedLogFiles.log_00007 AndreyExSeparatedLogFiles.log_00012 AndreyExSeparatedLogFiles.log_00017 AndreyExSeparatedLogFiles.log_00003 AndreyExSeparatedLogFiles.log_00008 AndreyExSeparatedLogFiles.log_00013
Другой вариант создания суффикса — использовать встроенный шестнадцатеричный суффикс, который чередует упорядоченные буквы и цифры.
В этом примере мы объединяем несколько вещей, которые мы вам уже показали. Мы разделим файл, используя свой собственный префикс и выбрали подчеркивание для удобства чтения.
Мы использовали опцию -x для создания шестнадцатеричного суффикса. Затем разделили наш файл на 50 кусков и дали суффиксу длину 6.
split AndreyExLogFile.log _ -x -n50 -a6
И вот результат вышеупомянутой команды:
andreyex@destroyer:~/Documents$ ls _000000 _000003 _000006 _000009 _00000c _00000f _000012 _000015 _000018 _00001b _00001e _000021 _000024 _000027 _00002a _00002d _000030 _000001 _000004 _000007 _00000a _00000d _000010 _000013 _000016 _000019 _00001c _00001f _000022 _000025 _000028 _00002b _00002e _000031 _000002 _000005 _000008 _00000b _00000e _000011 _000014 _000017 _00001a _00001d _000020 _000023 _000026 _000029 _00002c _00002f AndreyExLogFile.log
Также возможно использовать размер файла, чтобы разбить файлы в разбивке. Возможно, вам нужно отправить большой файл по сети с ограниченным размером как можно более эффективно. Вы можете указать точный размер для ваших требований.
Синтаксис может стать немного сложнее, так как мы продолжаем добавлять опции. Итак, мы объясним, как работает команда, прежде чем показывать пример.
Если вы хотите создать файлы определенного размера, используйте опцию -b. Затем вы можете написать n K [B], n M [B], n G [B], где n — это значение размера вашего файла, а K [1024] — это -kibi, M — -mebi, G — -gibi и далее. КБ [1000] — килограмм, МБ — мега и т. д.
Может показаться, что многое происходит, но это не так сложно, когда разбиваешь это. Вы указали исходный файл, наш префикс имени файла назначения, числовой суффикс и разделение по размеру файла 128 КБ.
split AndreyExLogFile.log AndreyExSeparatedLogFiles.log_ -d -b 128KB
Вот разделенные файлы:
andreyex@destroyer:~/Documents$ ls AndreyExLogFile.log AndreyExSeparatedLogFiles.log_02 AndreyExSeparatedLogFiles.log_05 AndreyExSeparatedLogFiles.log_08 AndreyExSeparatedLogFiles.log_00 AndreyExSeparatedLogFiles.log_03 AndreyExSeparatedLogFiles.log_06 AndreyExSeparatedLogFiles.log_09 AndreyExSeparatedLogFiles.log_01 AndreyExSeparatedLogFiles.log_04 AndreyExSeparatedLogFiles.log_07 AndreyExSeparatedLogFiles.log_10
Вы можете проверить результат с помощью команды wc.
andreyex@destroyer:~/Documents$ wc AndreyExSeparatedLogFiles.log_0* 1605 4959 128000 AndreyExSeparatedLogFiles.log_00 1605 4969 128000 AndreyExSeparatedLogFiles.log_01 1605 4953 128000 AndreyExSeparatedLogFiles.log_02 1605 4976 128000 AndreyExSeparatedLogFiles.log_03 1605 4955 128000 AndreyExSeparatedLogFiles.log_04 1605 4975 128000 AndreyExSeparatedLogFiles.log_05 1605 4966 128000 AndreyExSeparatedLogFiles.log_06 1605 4964 128000 AndreyExSeparatedLogFiles.log_07 1605 4968 128000 AndreyExSeparatedLogFiles.log_08 1605 4959 128000 AndreyExSeparatedLogFiles.log_09 16050 49644 1280000 total
Если вы хотите разбить файлы примерно на один и тот же размер, но сохранить структуру строк , это может быть лучшим выбором для вас. С помощью -C, вы можете указать максимальный размер. Затем программа автоматически разбивает файлы на основе полных строк.
split AndreyExLogFile.log AndreyExNewLogFiles.log_ -d -C 1MB
В выводе вы можете видеть, что первый разделенный файл имеет размер около 1 МБ, тогда как остальная часть файла находится во втором файле.
andreyex@destroyer:~/Documents$ ll total 2772 drwxr-xr-x 2 andreyex andreyex 81920 Jul 24 22:01 ./ drwxr-xr-x 19 andreyex andreyex 4096 Jul 23 22:23 ../ -rw-r--r-- 1 andreyex andreyex 1369273 Jul 20 17:52 AndreyExLogFile.log -rw-r--r-- 1 andreyex andreyex 999997 Jul 24 22:01 AndreyExNewLogFiles.log_00 -rw-r--r-- 1 andreyex andreyex 369276 Jul 24 22:01 AndreyExNewLogFiles.log_01
Это не команда split, но она может быть полезна для новых пользователей.
andreyex@destroyer:~/Documents$ ls xaa xab xac xad xae xaf xag xah xai xaj xak xal xam xan xao xap xaq xar
Вы можете использовать другую команду, чтобы присоединиться к этим файлам и создать копию нашего полного документа. Команда cat — это сокращение от конкатенации, это просто причудливое слово, означающее «объединить элементы вместе». Поскольку все файлы начинаются с буквы «х», звездочка будет применять команду ко всем файлам, которые начинаются с этой буквы.
andreyex@destroyer:~/Documents$ cat x* > recoveredLogFile.log andreyex@destroyer:~/Documents$ ls recoveredLogFile.log xab xad xaf xah xaj xal xan xap xar xaa xac xae xag xai xak xam xao xaq
Как видите, наш воссозданный файл имеет тот же размер, что и наш оригинал.
wc -l recreatedLogFile.log 17170 recreatedLogFile.log
Наше форматирование (включая количество строк) сохраняется в созданном файле.
Если вы новичок в Linux, мы надеемся, что это руководство помогло вам понять команду split. Если вы более опытны, расскажите нам ваш любимый способ использовать разделение в комментариях ниже!
Начинающим или опытным, мы бы посоветовали вам также взглянуть на команду csplit, которая является несколько лучшим способом разделения файлов в командной строке Linux .
Спасибо! Пригодилось
Спасибо, до этого мучился с большой таблицей (> 3Gbt) в exel-формате
Split помог, но потом перешел на awk и задача упростилась