Dividir o arquivo em vários arquivos pequenos, separados pelo símbolo de nova linha

10

Existe um utilitário que divide o arquivo pelo símbolo de nova linha? por exemplo, se um arquivo contiver as seguintes linhas,

aa
bbb
cccc

Se eu quiser dividi-lo em 3 arquivos, a saída desejada seria:

aa , bbb E cccc (em 3 arquivos diferentes)

Eu já verifiquei o comando split , ele só corta arquivos por tamanho de arquivo, não o que eu quero.

Se eu mesmo não escrevesse um utilitário, há alguma ferramenta padrão para usar?

    
por daisy 30.04.2013 / 08:07

3 respostas

11

A menos que eu esteja sentindo falta de algo, split será dividida por linha se você usar -l switch:

   -l, --lines=NUMBER
          put NUMBER lines per output file

então

split -l 1 inputfile

deve fazer o que quiser.

    
por 30.04.2013 / 10:42
4
awk '{print > $0".txt" }'  inputfile

criaria um arquivo por linha exclusiva no inputfile com o nome do conteúdo dessas linhas (com uma extensão .txt ). Mas cuidado, quando o limite de arquivos abertos simultâneos for atingido, algumas awk implementações falharão.

Ou

awk '{f = "output_file." NR; print $0 > f; close(f)}' inputfile

Para ter arquivos de saída numerados.

    
por 30.04.2013 / 08:20
3
A=0
while IFS= read -r LINE ; do
  printf '%s\n' "$LINE" > newfile$A
  (( A++ ))
done < "$INPUTFILE"
    
por 30.04.2013 / 08:17