Alinhar o ultimo carácter do arquivo (com espaços)

1. Alinhar o ultimo carácter do arquivo (com espaços)

Alexandre Jose da Costa
alexandre_jcosta

(usa Outra)

Enviado em 29/06/2020 - 15:07h

Boa tarde, Colaboradores.

Como sou novo utilizando shell, algumas coisas ainda são bem complexas para mim.

Estou com o seguinte problema. Tenho um arquivo onde todas as linhas deveram ter o mesmo tamanho, mesmo que os últimos caracteres estejam em branco (ultimo carácter alinhado).

Obs.: Vou interpretar o ultimo carácter com a barra (/)

Exemplo Atual:

João da Silva\
Maria da Conceição da Costa\
Joana Darc\
Marechal Deodoro da Fonseca de Alcântara Machado Oliveira\

Exemplo Desejado:

João da Silva \
Maria da Conceição da Costa \
Joana Darc \
Marechal Deodoro da Fonseca de Alcântara Machado Oliveira \

Todas as linhas com mesmo tamanho mesmo que preenchido com espaços em branco.
Alguém pode me ajudar.



  


2. Re: Alinhar o ultimo carácter do arquivo (com espaços)

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 29/06/2020 - 15:28h


alexandre_jcosta escreveu:

Boa tarde, Colaboradores.

Como sou novo utilizando shell, algumas coisas ainda são bem complexas para mim.

Estou com o seguinte problema. Tenho um arquivo onde todas as linhas deveram ter o mesmo tamanho, mesmo que os últimos caracteres estejam em branco (ultimo carácter alinhado).

Obs.: Vou interpretar o ultimo carácter com a barra (/)

Exemplo Atual:

João da Silva\
Maria da Conceição da Costa\
Joana Darc\
Marechal Deodoro da Fonseca de Alcântara Machado Oliveira\

Exemplo Desejado:

João da Silva \
Maria da Conceição da Costa \
Joana Darc \
Marechal Deodoro da Fonseca de Alcântara Machado Oliveira \

Todas as linhas com mesmo tamanho mesmo que preenchido com espaços em branco.
Alguém pode me ajudar.

Boa tarde Alexandre.
se quer o ultimo caractere com um espaço vazio,
faça:
sed -i 's/$/ /' nomes.txt
Para verificar se está certo:
cat -vet nomes.txt
...
Joana Darc $


______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


3. Re: Alinhar o ultimo carácter do arquivo (com espaços)

Gabriel
rabbit

(usa Debian)

Enviado em 29/06/2020 - 20:15h



Neste livro diz que Open Source Development Labs Inc paga para ele um salário de US$ 200.000.
E que o conselho é responsável por arrecadar US$ 10 mi para proteger os consumidores.

"A Open Source Development Labs Inc, paga-lhe um salário de cerca de US$ 200 mil."


Acho um valor justo, e ele deve ter diversos investimentos, imóveis e etc.

x.x
run rabbit run


4. Re: Alinhar o ultimo carácter do arquivo (com espaços)

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 29/06/2020 - 20:28h


rabbit escreveu:



Neste livro diz que Open Source Development Labs Inc paga para ele um salário de US$ 200.000.
E que o conselho é responsável por arrecadar US$ 10 mi para proteger os consumidores.

"A Open Source Development Labs Inc, paga-lhe um salário de cerca de US$ 200 mil."


Acho um valor justo, e ele deve ter diversos investimentos, imóveis e etc.

x.x
run rabbit run

Boa noite rabbit.
"Parece" que postou no lugar errado, parece . . . . kkkkkkk


______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


5. Re: Alinhar o ultimo carácter do arquivo (com espaços)

Fábio Berbert de Paula
fabio

(usa Debian)

Enviado em 30/06/2020 - 07:30h

Pelo que entendi você quer isso:

Dado o arquivo nomes.txt, descobrir a linha com maior número de colunas:

$ wc -L nomes.txt
68 nomes.txt

Retornou 68. Agora basta usar o sed:

$ sed ':a ; /.\{68\}/!{ s/$/ / ; ba}' nomes.txt

Retorno será todas as linhas com 68 colunas, onde as que tinham menos recebem o preenchimento de espaços em branco à direita.

Colocando tudo num shell script (se alguém tiver alguma solução mais elegante para substituir o número de colunas usado no sed por uma variável, sou todo ouvidos kkk. Minha solução foi armazenar o comando em uma variável e depois executar).

#!/bin/bash

FILE="nomes.txt"
COLS=$(wc -L ${FILE}|cut -d ' ' -f 1)
CMD="sed ':a ; /.\{${COLS}\}/!{ s/$/ / ; ba}' ${FILE}"
eval "$CMD"



6. Re: Alinhar o ultimo carácter do arquivo (com espaços)

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/07/2020 - 19:13h

fabio escreveu:

Pelo que entendi você quer isso:

Dado o arquivo nomes.txt, descobrir a linha com maior número de colunas:

$ wc -L nomes.txt
68 nomes.txt

Retornou 68. Agora basta usar o sed:

$ sed ':a ; /.\{68\}/!{ s/$/ / ; ba}' nomes.txt

Retorno será todas as linhas com 68 colunas, onde as que tinham menos recebem o preenchimento de espaços em branco à direita.

Colocando tudo num shell script (se alguém tiver alguma solução mais elegante para substituir o número de colunas usado no sed por uma variável, sou todo ouvidos kkk. Minha solução foi armazenar o comando em uma variável e depois executar).

#!/bin/bash

FILE="nomes.txt"
COLS=$(wc -L ${FILE}|cut -d ' ' -f 1)
CMD="sed ':a ; /.\{${COLS}\}/!{ s/$/ / ; ba}' ${FILE}"
eval "$CMD"


Boa noite Fábio,
Gostei desse "sed", Rsrsrsr.
Só um detalhe em relação ao "wc",
Redirecionando a entrada padrão, não é necessário o "cut":
COLS=$(wc -L < ${FILE}).
Tudo em uma linha....
sed -r ':a;/.{'$(wc -L < nomes.txt)'}/!{s/$/ /;ba}' nomes.txt 


Att.: Marcelo Oliver
______________________________________________________________________


7. Re: Alinhar o ultimo carácter do arquivo (com espaços)

Alexandre Jose da Costa
alexandre_jcosta

(usa Outra)

Enviado em 08/07/2020 - 18:12h

A Solução proposta pelo Fabio funciona.
Porem a performance muito lenta, fiz um teste com arquivo de 1000 linhas resposta aproximadamente em 10 minutos

Em produção o volume, será muito maior.
Preciso de algo mais performático.


8. Re: Alinhar o ultimo carácter do arquivo (com espaços)

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 08/07/2020 - 18:49h


alexandre_jcosta escreveu:

A Solução proposta pelo Fabio funciona.
Porem a performance muito lenta, fiz um teste com arquivo de 1000 linhas resposta aproximadamente em 10 minutos

Em produção o volume, será muito maior.
Preciso de algo mais performático.

Boa noite alexandre_jcosta.
Testei aqui com um arquivo de 15000 linhas,
concluído em:
real 0m0,213s
user 0m0,209s
sys 0m0,004s

Verifique se melhora a performance...
COLS=$(wc -L < arquivo.txt).
sed -ri ':a;/.{'$COLS'}/!{s/$/ /;ba}' arquivo.txt
Note que o parâmetro "i", altera o arquivo.txt

______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


9. Re: Alinhar o ultimo carácter do arquivo (com espaços)

Fábio Berbert de Paula
fabio

(usa Debian)

Enviado em 08/07/2020 - 19:46h

Amigo, tem alguma coisa errada na tua máquina. Criei um arquivo com 250 mil nomes:

$ wc -l nomes.txt
250000 nomes.txt

$ time bash processar.sh > /dev/null
real 0m2,041s
user 0m2,037s
sys 0m0,005s

O script que passei como solução (sem o fine tune do oliver) executou em 2 segundos.

PS.: usei o bash como shell.

Aumentei o arquivo para 2 milhões 750 mil nomes, executou em 22 segundos:

$ wc -l nomes.txt
2750000 nomes.txt

$ time bash processar.sh > /dev/null
real 0m22,760s
user 0m22,690s
sys 0m0,066s

Qual é teu processador?



10. Re: Alinhar o ultimo carácter do arquivo (com espaços)

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/07/2020 - 16:15h


fabio escreveu:

Amigo, tem alguma coisa errada na tua máquina. Criei um arquivo com 250 mil nomes:

$ wc -l nomes.txt
250000 nomes.txt

$ time bash processar.sh > /dev/null
real 0m2,041s
user 0m2,037s
sys 0m0,005s

O script que passei como solução (sem o fine tune do oliver) executou em 2 segundos.

PS.: usei o bash como shell.

Aumentei o arquivo para 2 milhões 750 mil nomes, executou em 22 segundos:

$ wc -l nomes.txt
2750000 nomes.txt

$ time bash processar.sh > /dev/null
real 0m22,760s
user 0m22,690s
sys 0m0,066s

Qual é teu processador?

Boa tarde Fabio,
Bastante rápido......
Fiquei curioso, qual a configuração do seu "pc", é um Mac?


______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


11. Re: Alinhar o ultimo carácter do arquivo (com espaços)

Fábio Berbert de Paula
fabio

(usa Debian)

Enviado em 10/07/2020 - 18:54h


msoliver escreveu:

Boa tarde Fabio,
Bastante rápido......
Fiquei curioso, qual a configuração do seu "pc", é um Mac?


PC comum, comprado na MagazineLuiza.

Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
4 cores, 8 threads
16GB de RAM
Esse processador aí, apesar de ser i7, é de 2011 e já foi descontinuado. Computador bem mediano.

O diferencial provavelmente é o disco SSD.









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts