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


13

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

aa
bbb
cccc

Se eu quiser dividi-lo em três arquivos, a saída desejada será:

aa, bbbE cccc(em 3 arquivos diferentes)

Eu já verifiquei o splitcomando, ele apenas corta o arquivo pelo tamanho do arquivo, não o que eu quero.

Se eu não escrevi um utilitário, existe alguma ferramenta padrão para usar?


qual deve ser o nome do arquivo?
Rahul Patil

você quer criar arquivo de cada linha? Estou correto?
Rahul Patil

Respostas:


14

A menos que esteja faltando alguma coisa, splitela será dividida por linha se você usar o -lswitch:

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

assim

split -l 1 inputfile

deve fazer o que quiser.


4
awk '{print > $0".txt" }'  inputfile

criaria um arquivo por linha exclusiva no arquivo de entrada nomeado após o conteúdo dessas linhas (com uma .txtextensão). Mas lembre-se de que quando o limite de arquivos abertos simultâneos for atingido, algumas awkimplementações falharão.

Ou

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

Para ter arquivos de saída numerados.


Você pode fechar () o arquivo de saída depois que ele for gravado, caso contrário, você terá o número máximo de limites de arquivos abertos com a maioria das implementações do awk.
Stéphane Chazelas

não sabe disso .. você pode fazer isso por mim? obrigado ..
Rahul Patil

3
A=0
while IFS= read -r LINE ; do
  printf '%s\n' "$LINE" > newfile$A
  (( A++ ))
done < "$INPUTFILE"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.