Dividir um arquivo por linha e ter controle sobre a extensão de arquivos resultante

24

Existe um comando padrão para divisão de arquivos - divisão.

Por exemplo, se eu quiser dividir um arquivo de palavras em vários blocos de 10.000 linhas, posso usar:

split -dl 10000 words wrd

e geraria vários arquivos no formato wrd.01, wrd.02 e assim por diante.

Mas eu quero ter uma extensão específica para esses arquivos - por exemplo, eu quero obter arquivos wtd.01.txt, wrd.02.txt.

Existe uma maneira de fazer isso?

    
por Rogach 25.02.2012 / 05:47

3 respostas

10

Não com split , mas você pode renomeá-los facilmente depois ou pode fazer isso em awk :

awk '{filename = "wrd." int((NR-1)/10000) ".txt"; print >> filename}' inputfile
    
por 25.02.2012 / 06:08
40

Isso não estava disponível na época, mas com mais recente As versões ( ≥ 8.16 ) de gnu split um podem usar a opção --additional-suffix para ter controle sobre a extensão resultante. De man split :

--additional-suffix=SUFFIX
              append an additional SUFFIX to file names.

quando usar essa opção:

split -dl 10000 --additional-suffix=.txt words wrd

as peças resultantes terminarão automaticamente em .txt :

wrd00.txt
wrd01.txt
.........
    
por 30.04.2013 / 11:35
13

Tais tarefas são melhor gerenciadas com o shell. Use split e, em seguida, escreva um loop simples para renomear os arquivos. Por exemplo,

for file in wrd.*
do
    mv "$file" "$file.txt"
done

renomeia seus arquivos wrd.01, wrd.02, etc. para que todos tenham uma extensão .txt.

    
por 25.02.2012 / 06:07