Como remover quebras de linha de números grandes? [duplicado]

3

Eu gostaria de poder gerar um grande número de dígitos (por exemplo, o primeiro milhão de dígitos decimais da constante Napier) e depois salvar o número em um arquivo de texto sem nenhuma quebra de linha.

Eu não consigo fazer isso no GEdit ou no LibreOffice Writer. Eu uso o Maxima no Terminal para gerar os números, mas eles são exibidos com quebras de linha.

Eu preciso encontrar uma maneira de gerar os números sem quebras de linha ou encontrar um editor de texto capaz de remover as quebras de linha de números grandes contendo milhões de dígitos (posso remover as quebras de linha de números contendo milhares de dígitos sem quaisquer problemas).

Eu uso a sintaxe Terminal abaixo para gerar o primeiro milhão de dígitos decimais da constante Napier, e então copie e cole os dígitos em um editor de texto (removendo \\ e \ n).

sudo apt-get install wxmaxima

maxima

bfloat(%e),fpprec:1000000;

O que acontece quando eu tento copiar e colar no GEdit e, em seguida, remover as quebras de linha, é possível obter os dígitos todos em uma linha, mas os dígitos não serão exibidos. Como o GEdit pode remover com êxito as quebras de linha e exibir 1000 dígitos, mas não um milhão de dígitos, estou imaginando se pode ser um problema de memória. No entanto, quando tento salvar o arquivo como TXT e depois abri-lo no LibreOffice, ele ainda contém quebras de linha. O LibreOffice parece não conseguir remover as quebras de linha, mesmo quando copio e colo diretamente do Terminal.

Devo acrescentar talvez que eu não estou no Ubuntu canônico, mas o garfo conhecido como Mint: - /.

    
por Nicole Sharp 25.12.2017 / 11:59

2 respostas

4

O GEdit (e o Libreoffice) não são as ferramentas certas para isso.

Se eu entendi bem, então você quer converter

123456\n

em

123456

Use Perl, por exemplo:

perl -pe 'chomp' your_input_file.txt > without_newlines.txt

Atualizar O arquivo de entrada acabou tendo não apenas quebra de linha, mas também um caractere de continuação de linha \ no final, ou seja:

2.7182818284590452353602874713526624977572470936999595749669676277240766\
303535475945713821785251664274274663919320030599218174135966290435729003342952\
605956307381323286279434907632338298807531952510190115738341879307021540891499\
348841675092447614606680822648001684774118537423454424371075390777449920695517\
...

Para removê-los (assim como as quebras de linha), o seguinte comando fará:

perl -pe 'chomp; s/\//;' your_input_file.txt > without_newlines.txt
    
por PerlDuck 25.12.2017 / 12:32
5

IMHO o jeito certo de fazer isso é evitar copiar e colar o texto completamente, escrevendo a saída maxima diretamente no arquivo:

x:bfloat(%e),fpprec:1000000$
stringout("my_big_number.txt",x);

$ no lugar de ; na primeira expressão apenas suprime a saída do console - bastante grande.

Você pode confirmar que não há novas linhas adicionais no arquivo de saída usando wc :

$ wc my_big_number.txt
      2       1 1000006 my_big_number.txt

(na verdade, há uma nova linha adicional, pois stringout aparece para inserir uma única linha em branco antes da saída; no entanto, não há nenhuma dentro da própria saída numérica).

Você pode então converter o arquivo de texto para qualquer outro formato que desejar - desde que você tenha o LibreOffice instalado, usando seus filtros de conversão independentes:

$ libreoffice --convert-to pdf my_big_number.txt
$ xdg-open my_big_number.pdf 

Como alternativa, você pode usar o utilitário de linha de comando unoconv do LO:

$ unoconv -f pdf my_big_number.txt 

Veja, por exemplo, Como converter TXT para PDF?

    
por steeldriver 25.12.2017 / 16:09