você está aqui: Home  → Arquivo de Mensagens Ebook Gratuito: Dá para fazer em Shell?, com o Prof. Julio Neves

O comando csplit

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 19 de Junho de 1997

Outro comando também utilizado para se dividir um arquivo em vários outros é o comando csplit (Content Split).

O comando csplit permite que se especifique uma string que irá indicar o delimitador de cada um dos novos arquivos.

Tomemos como exemplo o arquivo abaixo, chamado arq1:

arq1

Capítulo 1

Era uma vez, era uma vez três porquinhos, Palhaço, Palito e Pedrito.

Capítulo 2
E o Lobo Mau, ...
Capítulo 3
E o caçador, matou o Lobo Mau, casou-se com a Chapeuzinho Vermelho,
e viveram felizes para sempre.

		The End
**
@ Fim arq1**

O autor, colocou todos os capítulos do livro em apenas um arquivo e depois se arrependeu. Agora ele quer criar vários arquivos contendo um capítulo cada. O comando abaixo pode resolver este problema:

$ csplit -f Capit arq1 "/Capitulo/" {2}
$ ls -l
total 4
-rw-r--r--   1 queiroz  supsof         0 Jun 17 18:31 Capit00
-rw-r--r--   1 queiroz  supsof        85 Jun 17 18:31 Capit01
-rw-r--r--   1 queiroz  supsof        29 Jun 17 18:31 Capit02
-rw-r--r--   1 queiroz  supsof       136 Jun 17 18:31 Capit03
-rw-r--r--   1 queiroz  supsof       250 Jun 17 18:11 arq1

Traduzindo, o comando csplit irá criar vários arquivos iniciados em "Capit", até um máximo de 3 arquivos (parâmetro {2}, computa-se o número entre colchetes + 1).

Este valor indica o número de vezes que o comando será repetido.

No nosso exemplo, foi especificado exatamente o número de capítulos contidos no arquivo original (3). Caso não conheçamos este valor, podemos especificar um número que sabemos maior que o número de arquivos existentes.

O comando csplit irá reclamar, e apagar todos os arquivos já criados. Para evitarmos que isto aconteça, basta especificar a diretiva "-k", ou seja, a reclamação continuará sendo feita, mas o trabalho já feito não será removido.

O que não pode é se especificar um número inferior ao desejado.

Neste caso, o comando ficaria como:

$ csplit -k -f Capit arq1 "/Capitulo/" {9}
0
85
29
csplit: {9} - out of range
136

A quebra será feita, tomando-se por base o nosso exemplo, antes da string Capitulo, exclusive. Devido a isto, o primeiro arquivo, Capit00, está vazio. Os arquivos criados, à exceção do arquivo Capit00 que está vazio, contêm:

Capit01

Capitulo 1

Era uma vez, era uma vez três porquinhos, Palhaço, Palito e Pedrito.
  ...

Capit02

Capitulo 2

E o Lobo Mau, ...

Capit03

Capitulo 3

E o caçador, matou o Lobo Mau, casou-se com a Chapeuzinho Vermelho,
e viveram felizes para sempre.

                The End

O comando csplit todavia, é um pouco complexo. Existe um programa de domínio público chamado slice, que é muito mais flexível e fácil de usar que o comando csplit.

Saiba mais sobre o comando slice

Artigo revisado e atualizado em 20 de julho de 2020



Veja a relação completa dos artigos de Rubens Queiroz de Almeida