Como posso dividir um arquivo de texto grande em pedaços de 500 palavras ou mais?

4

Eu sei que há o comando split , que pode dividir um arquivo em vários pedaços com base no tamanho do arquivo, e depois há o comando wc , que pode contar palavras. Eu simplesmente não sei como usar os dois juntos.

    
por Jonathan 01.03.2013 / 08:18

6 respostas

4

Deve ser feito com wc ? Como aqui , encontrei uma tentativa muito boa de usar o regex como um padrão csplit . Eu não tenho um sistema para testá-lo agora, mas o próprio regex parece fazer o trabalho.

A expressão é assim:

 csplit input-file.txt '/([\w.,;]+\s+){500}/'
    
por 01.03.2013 / 09:03
0

Tente fazer isso:

file=/etc/passwd
count=2
count_file_lines=$(wc -l < "$file")
split -n$((count_file_lines/count)) "$file"
ls -ltr x*

Isso dividirá um arquivo por $count (2)

    
por 01.03.2013 / 08:35
0
Utilitários Unix geralmente operam em linhas completas, então sua melhor aposta é primeiro modificar sua entrada para que ela escreva uma palavra por linha, como esta (você pode ter que modificar este comando um pouco se você tiver outros caracteres em suas palavras). ):

<inputfile tr -c A-Za-z0-9 \n

Como você só está interessado nas palavras, pode ser uma boa ideia livrar-se das linhas em branco, canalizando a saída para uma chamada grep . Veja como seu comando completo pode parecer:

<inputfile tr -c A-Za-z0-9 \n | grep -v '^$' | split -l 500

Mais tarde, você poderá juntar-se aos novos arquivos para obter tudo de volta em uma única linha (usando algo como tr -d \n ), mas se você estiver planejando fazer mais manipulações com ferramentas Unix, continue assim, split não é o único programa que funcionará em linhas inteiras.

    
por 02.03.2013 / 14:19
0

Veja se isso ajuda (eu tentaria em um diretório temporário primeiro):

perl -e '
         undef $/;
         $file=<>;
         while($file=~ /\G((\S+\s+){500})/gc)
         {
            $i++;
            open A,">","chunk-$i.txt";
            print A $1;
            close A;
         }
         $i++;
         if($file=~ /\G(.+)\Z/sg)
         {
          open A,">","chunk-$i.txt";
          print A $1;
         }
        '  your_file_name_here

Editar: Código corrigido e testado. Desculpe pelos erros anteriores.

Editar 2: Isso irá gerar arquivos chamados chunk-#.txt a partir de chunk-1.txt . Cada "chunk" conterá 500 palavras e o último "chunk" conterá o que sobrar no arquivo (< = 500 palavras). Você pode personalizar esse comportamento alterando as partes relevantes no código.

    
por 02.03.2013 / 07:00
0

Você também pode usar este software para arquivos de palavras divididas. O Word Files Splitter é uma excelente ferramenta para dividir um único arquivo de palavras em vários arquivos de palavras, de acordo com o número de páginas ou o número de seções em um arquivo de palavras.

link

    
por 30.07.2014 / 11:16
-1

Esta linha de comando simples deve fazer o truque. Ele irá criar vários pedaços de 70 caracteres a partir do arquivo de texto de origem

cntr=1;for chunk in 'sed -e 's/.\{70\}/&\n/g' source.txt'; do echo $chunk > chunk$cntr.txt; cntr=$(( $cntr + 1 )); done
    
por 30.07.2014 / 11:49

Tags