При работе в командной строке в Linux, вы можете оказаться в ситуации, когда в вам нужно разбить файл на несколько частей. Если вы уже ищете способ сделать это, или просто хотите знать, как это может быть сделано, вы будете рады узнать, существует инструмент — который называется csplit — предназначена как раз для этой цели.
В этой статье мы обсудим основы этого инструмента, а также узнаем, как его можно использовать. Но прежде, чем мы сделаем это, стоит отметить, что все команды/инструкции, упомянутые здесь, были протестированы на Ubuntu 16.04 LTS.
Вот как страница человека определяет команду csplit:
csplit - разбивка файла на секции, определенных контекстных строк
Ниже ее общий синтаксис:
csplit [OPTION]... FILE PATTERN...
Отдельные небольшие файлы, созданные командой csplit имеют имена, такие как xx00 и xx01.
Следующие типы примеров Q & A должны дать вам хорошее представление о том, как работает команда csplit.
Предположим, что ваш файл содержит 6 строк, и требование разделить этот файл на третьей строке, то это может быть сделано путем передачи «3» в качестве аргумента командной строки после имени команды и файла.
Например, в нашем случае, file1 содержит следующие строки:
1 Asia 2 Africa 3 Europe 4 North America 5 South America 6 Australia
И вот команда мы выполнили:
$ csplit file1 3 27 66
Цифры, полученные на выходе являются количество байт для файлов выполненной команды. Излишне говорить, что два файла были произведены на выходе, а именно: xx00 и xx01.
Содержимое этих файлов подтверждают разделение произошло на линии № 3.
Вы также можете использовать регулярные выражения с помощью команды csplit. Например, в предыдущем случае, если вы хотите, чтобы инструмент повторил рисунок еще один раз, то вы можете сделать это с помощью следующей команды:
csplit file1 3 {1}
Таким образом, в данном случае, были произведены три выходных файла:
$ cat xx00 1 Asia 2 Africa $ cat xx01 3 Europe 4 North America 5 South America $ cat xx02 6 Australia
По умолчанию файлы, которые производит команда csplit на выходе имеют «хх» в качестве префикса. Тем не менее, если вы хотите, вы можете изменить префикс, используя параметр командной строки -f, который требует нового префикса в качестве входных данных.
Например, следующая команда будет создавать файлы, имеющие «htf» в качестве префикса.
csplit file1 1 -f htf
$ csplit file1 1 -f htf 0 93 $ ls htf* htf00 htf01
Команда csplit, по умолчанию, удаляет выходные файлы (любые, если они созданы), как только команда сталкивается с ситуацией об ошибке. Например, следующий пример подтверждает, что выходной файл в конечном счете не был создан:
$ csplit file1 1 2 {3} 13 28 36 csplit: '2': line number out of range on repetition 3 16 $ ls xx* ls: cannot access 'xx*': No such file or directory
Тем не менее, если вы хотите, вы можете изменить это поведение, используя опцию -k в команде. Например, та же команда была выполнена снова, но с этой опцией, и выходные файлы не были удалены в этот раз.
$ csplit -k file1 1 2 {3} 13 28 36 csplit: '2': line number out of range on repetition 3 16 $ ls xx* xx00 xx01 xx02 xx03
Команда csplit также предоставляет возможность для подавления линий, которые соответствуют шаблону ввода. Вариант в вопросе —suppress-matched.
Например, следующая команда разбивает файл (file1) в строке 2 (xx00 будет содержать строку 1, в то время как xx11 будет содержать остальные линии).
csplit file1 2
Но если вы хотите, подавить линию 2, то вы можете выполнить следующую команду:
csplit --suppress-matched file1 2
Так же, как и сама приставка, количество цифр, которые следуют за префиксом в выходных файлов также настраивается. Поэтому предположим, что вы хотите дать имена, как xx000 и xx0001, вы можете сделать это с помощью опции -n командной строки, которая требует ввода номера, обозначающее новое количество цифр.
Например:
csplit -n 1 file1 2
Вышеупомянутая команда будет выводить имена файлов, как xx0, xx1, и так далее.
Команда csplit в Linux пользователь использует не так часто, но это, безусловно, важная утилита, и вы должны по- крайней мере ее знать. Мы рассмотрели большинство основных примеров и опций командной строки здесь. Попробуйте их, а затем перейдите на страницу инструмента man, чтобы узнать больше об ней.