Como posso preencher cada linha em um arquivo de texto com um determinado número de espaços com linhas de comprimento desiguais?

1

Eu tenho este arquivo de texto que estou tentando resolver, tem caracteres como abaixo:

abcd  a27382  ESH738 991839
ahsj  dhaksj  GSH736 774828
ahsj  dhaksj  RHA330
ahsj  dhaksj  GSH736 774828

A minha pergunta é: como posso inserir 3 espaços após o último conjunto de números no lado direito em todas as linhas sem o bloco de notas fazer o retorno de carro quando chegar ao final do último número?

Eu preciso fazer isso para mais de 40.000 linhas, então pressionar manualmente a barra de espaço no final de cada linha para obter esses 3 espaços extras, está fora de questão. Também nos lugares onde não há nenhum número (exemplo, linha 3) eu ainda preciso desses espaços extras em branco para compensar os números que faltam, nesse caso, seriam 9 espaços (6 para os números não existentes e 3 para os últimos espaços após). Por favor, deixe-me saber se você sabe de alguma maneira fácil de fazer isso, pois seria de grande ajuda, obrigado!

    
por Claudio 29.04.2015 / 23:08

2 respostas

0

Usando o Notepad ++, é possível executar duas substituições baseadas em regex que preencherão todas as linhas com espaços e, em seguida, redefinir todas as linhas com o mesmo tamanho. Eu não testei o desempenho dessa técnica em um arquivo de 40.000 linhas.

A primeira substituição vai adicionar espaços à direita do texto:

NoseparadorSubstituir,defina"Expressão regular" e certifique-se de que "corresponde a nova linha" e "Quebra automática" estão desativados. Digite ^(.*) , o que significa combinar tudo na linha em "Localizar o que" e digite $1 seguido pelo número de espaços que você deseja adicionar (no seu exemplo, adicionar 9).

Depois de clicar em substituir, todas as linhas devem ter pelo menos o comprimento desejado e muitas serão mais longas do que você deseja.

A segunda substituição, que é cortada.

Paraasegundasubstituição,vamospegarduaspartesnalinhaejogarumafora.

Primeiro,certifique-sedeque"Substituir por" tenha apenas $1 e nenhum espaço depois. Em seguida, altere "Localizar o que" para ^(.{28})(.*) , que lê encontrar no primeiro linha os primeiros 28 (altere para 31 para manter 3 espaços como preenchimento) caracteres no primeiro grupo e, em seguida, localize todo o restante da linha na segunda. grupo.

Quando isto é aplicado com "Replace", deve cortar todas as linhas com o mesmo comprimento.

Observação: alguns mecanismos de expressão regular podem precisar de $ , o que significa "o fim da linha" acrescentado ao usar essa técnica.

    
por 30.04.2015 / 14:39
0

depende se você está escrevendo o arquivo original ou não. Se você está criando este arquivo, você pode usar printf como este

 printf "%s   " "your_string_of_text"

printf tem muitas opções de formatação que você pode aproveitar. Mas se você estiver editando o arquivo, sed irá atendê-lo bem

 sed 's/^.*$/&\ \ \ /g' some_file > some_other_file

Isso adicionará 3 espaços ao final de cada linha em some_file e gravará a saída em some_other_file . Observe que os espaços são escapados e o E comercializa o propósito de gravar o primeiro padrão na saída.

    
por 30.04.2015 / 00:37