Busca

Visite também: UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 



 

Aprenda inglês em casa

Baixe gratuitamente as duas primeiras aulas

English for Reading and Listening

Receba por email, diariamente, mensagens contendo materiais para leitura e audição, incluindo arquivos no formato MP3 gravados por falantes nativos.

Saiba mais e faça sua inscrição

você está aqui: Home  → Colunistas  →  Cantinho do Shell

 

Os comandos split e csplit

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 07 de Março de 2008

Muitas vezes precisamos dividir um arquivo em vários outros menores, seguindo alguma convenção. Para isto podemos usar tanto o comando split.

O comando split nos permite dividir um arquivo baseando-se no número de linhas ou número de bytes que cada arquivo novo deve conter.

Por exemplo:

  % split -l 10 /etc/passwd

Este comando criará vários arquivos denominados xaa, xab, xac, etc. Nem sempre estes nomes são os mais convenientes. Neste caso podemos, com o acréscimo de mais um parâmetro, determinar o sufixo do nome dos arquivos que serão criados:

  % split -l 10 /etc/passwd pas-
  % ls
  pas-aa  pas-ab  pas-ac  pas-ad  pas-ae  pas-af  pas-ag  pas-ah

Os arquivos criados passaram a conter o prefixo "pas-", permitindo identificar mais claramente os contadores dos arquivos (aa, ab, ac, etc.)

Além do particionamento em linhas, o comando split, quando invocado com a opção "b", irá efetuar a divisão do arquivo baseando-se no número de bytes:

  % split -b 32k /etc/passwd pas-

ou então

  % split -b 32 /etc/passwd pas-

ou ainda

  % split -b 32m /etc/passwd pas-

No primeiro exemplo, o arquivo /etc/passwd será dividido em vários arquivos de 32kbytes cada um, ao passo que no segundo exemplo, o arquivo será dividido em arquivos de 32 bytes cada. No terceiro exemplo, o arquivo /etc/passwd é dividido em arquivos de 32MB cada (pouco provável :-)

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

Ao contrário do comando 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

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 "/Capítulo/" {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 flag "-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 "/Capítulo/" {9}
  0
  85
  29
  csplit: {9} - out of range
  136

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

Capit01

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

Capit02

  Capítulo 2
  E o Lobo Mau, ...

Capit03

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

Publicado originalmente na Dicas-L em 19 de junho de 1997 e 18 de junho de 1997
Versão para impressão
  • Currently 3.09/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.1 /5 (184 votos)

Artigos Publicados


Linux Shell Script em Newsgroup

Servidor: news.gmane.org

Grupo: gmane.org.user-groups.programming.shell.brazil


Para se manter atualizado sobre as novidades desta coluna, consulte sempre o newsfeed RSS

Cantinho do Shell NewsFeed RSS

Para saber mais sobre RSS, leia o artigo O Padrão RSS - A luz no fim do túnel.


Opinião dos Leitores

jackson
10 Mar 2008, 11:40
Mto bom.

Pequena errata:
Só acho que no exemplo do csplit, buscar a string "/Capitulo/" , onde no texto a palavra está "Capítulo", não dará certo.

Abraço.
Psycho
10 Mar 2008, 10:54
Foi so eu que vi que ele publicou esse artigo tb em 2997??

xD
ADAM
08 Mar 2008, 20:35
Bonitinho o texto, continue assim!!! Abraços.
*Nome:
Email:
Me notifique sobre novos comentários nessa pagina
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

Recomende este site
Recomendar este artigo