Deletar se não atender ao padrão

1. Deletar se não atender ao padrão

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 01/06/2020 - 14:16h

Pessoas ... tenho o arquivo com N colunas separadas por ";" preciso que:

* Delete TUDO da 15ª coluna até o final
* Delete TUDO da 6ª até a 15ª coluna que não seja no mínino uma sequência de 8 números ( inclusive os ";")

A principio pensei em pegar as 15 primeiras colunas e jogar em outro arquivo ... mato o problema 1
pego da 1 até a 5 ... depois vou por colunas únicas e tratando o padrão.

Mas creio que deve ter uma solução mais profissa, só não sei qual ... preciso de uma luz.


  


2. Re: Deletar se não atender ao padrão

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/06/2020 - 19:44h

Mauriciodez escreveu:

Pessoas ... tenho o arquivo com N colunas separadas por ";" preciso que:

* Delete TUDO da 15ª coluna até o final
* Delete TUDO da 6ª até a 15ª coluna que não seja no mínino uma sequência de 8 números ( inclusive os ";")

A principio pensei em pegar as 15 primeiras colunas e jogar em outro arquivo ... mato o problema 1
pego da 1 até a 5 ... depois vou por colunas únicas e tratando o padrão.

Mas creio que deve ter uma solução mais profissa, só não sei qual ... preciso de uma luz.

Segue a luz!!!
O awk com laço e condicional, resolvem o problema...
O laço, é para "casar" os campos após o 5º e, limitar até o 15º campo,
Obs.:
Se utilizar "quantificador", na regex do awk, deve ter o gawk instalado.
Fiz aqui, Funciona a contento....
Tudo em uma linha.
Bem tranquilo..... rsrsrsrsrs

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


3. Re: Deletar se não atender ao padrão

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 01/06/2020 - 20:20h


msoliver escreveu:
Segue a luz!!!


o máximo que sei fazer com awk é um print simples .. esses comandos mirabolantes é só vc mesmo !!!

mas valew ... vou tentar fazer !!!


------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




4. Re: Deletar se não atender ao padrão

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/06/2020 - 20:58h

Mauriciodez escreveu:


msoliver escreveu:
Segue a luz!!!


o máximo que sei fazer com awk é um print simples .. esses comandos mirabolantes é só vc mesmo !!!

mas valew ... vou tentar fazer !!!


------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------


Verifique se é isso mesmo:
awk -F";" '{for(x=1;x<=15;x++) if(x<=5) printf "%s;" ,$x;else if ($x~/[0-9]{8,}/) printf "%s;" ,$x;printf "\n"}' numeros.txt

Requer "GAWK"
*Do 1 º ao 5º campo, imprime sem testar,
do 6º ao 15º, testa se tem 8 ou mais números...
Obs.:
Pode trocar o "else if", por:

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


5. Re: Deletar se não atender ao padrão

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 02/06/2020 - 14:48h

msoliver escreveu:
awk -F";" '{for(x=1;x<=15;x++) if(x<=5) printf "%s;" ,$x;else if ($x~/[0-9]{8,}/) printf "%s;" ,$x;printf "\n"}' numeros.txt



o que significa
* printf "%s;" ,$x
* printf "\n"

EDIT: rola um "replace" nesse comando ou tenho que direcionar para um novo arquivo ?

------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




6. Re: Deletar se não atender ao padrão

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 02/06/2020 - 16:23h


Mauriciodez escreveu:

msoliver escreveu:
awk -F";" '{for(x=1;x<=15;x++) if(x<=5) printf "%s;" ,$x;else if ($x~/[0-9]{8,}/) printf "%s;" ,$x;printf "\n"}' numeros.txt



o que significa
* printf "%s;" ,$x
* printf "\n"

EDIT: rola um "replace" nesse comando ou tenho que direcionar para um novo arquivo ?

------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------


awk -F";" '{for(x=1;x<=15;x++) if(x<=5) printf "%s;" ,$x;else if ($x~/[0-9]{8,}/) printf "%s;" ,$x;printf "\n"}' numeros.txt 

o que significa
* printf "%s;" ,$x => Imprime o campo que casou, o mesmo que $1,$2,$3,$4, etc, mas, como é usada a var "x", gerada no laço "for", é usado "$x".
x é o numero.
$x é o campo
* printf "\n" => pula uma linha....., separando os registros.
Se "replace", refere-se a "alterar" o próprio arquivo, é possível com o -i inplace "gawk", conforme já citei em:
https://www.vivaolinux.com.br/topico/Shell-Script/Loop-para-editar-linhas

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






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts