Tente:
split -l 5 --additional-suffix=.txt abc.txt abc
Ou, se você quiser números no lugar de letras:
split -l 5 -d --additional-suffix=.txt abc.txt abc
O abc
que adicionamos depois dos nomes dos arquivos serve como o prefixo .
Como você queria .txt
como um sufixo, adicionamos a opção --additional-suffix=.txt
.
O opcional -d
indica split
para usar números em vez de letras.
Exemplo
Vamos começar com um diretório com um arquivo:
$ ls
abc.txt
Agora, vamos dividir esse arquivo:
$ split -l 5 -d --additional-suffix=.txt abc.txt abc
$ ls
abc00.txt abc01.txt abc02.txt abc03.txt abc.txt
Solução alternativa 1: usando o shell
As versões atuais do GNU split suportam a opção --additional-suffix
e split
faz parte do GNU coreutils. Isso significa que esta opção estará eventualmente disponível em todos os sistemas linux.
Para os sistemas que atualmente faltam, uma alternativa é renomear os arquivos depois que split
os cria. Por exemplo:
$ split -l 5 -d abc.txt abc
$ for f in ./abc??; do mv "$f" "$f.txt"; done
$ ls
abc00.txt abc01.txt abc02.txt abc03.txt abc.txt
O acima assume que o tamanho padrão do sufixo de 2 se aplica. Caso contrário, altere o número de ?
para corresponder ao comprimento do sufixo que você está usando. Por exemplo, se você estiver usando um comprimento de sufixo de 5:
$ split -l 5 -a 5 -d abc.txt abc
$ for f in ./abc?????; do mv "$f" "$f.txt"; done
$ ls
abc00000.txt abc00001.txt abc00002.txt abc00003.txt abc.txt
Solução alternativa 2: usando o awk
Aqui, a opção l
especifica o número de linhas a serem incluídas em cada arquivo dividido e d
especifica o número de dígitos a serem usados no nome dos arquivos divididos. Certifique-se de que d
seja grande o suficiente.
$ awk -v l=5 -v d=2 '{n="0000" int((NR-1)/l); f="abc" substr(n,length(n)+1-d) ".txt"; if (f!=old) close(old); old=f; print >f}' abc.txt
$ ls
abc00.txt abc01.txt abc02.txt abc03.txt abc.txt