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?

margarida
fonte
qual deve ser o nome do arquivo?
Rahul Patil
você quer criar arquivo de cada linha? Estou correto?
Rahul Patil
nomes sequenciais: unix.stackexchange.com/questions/164903/...
Ciro Santilli新疆改造中心法轮功六四事件

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.

don_crissti
fonte
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.

Rahul Patil
fonte
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"
Uwe
fonte