Usando Shell para Busca em Arquivo de texto [RESOLVIDO]

1. Usando Shell para Busca em Arquivo de texto [RESOLVIDO]

bruno vieira
Brunoro

(usa Arch Linux)

Enviado em 28/01/2022 - 16:36h

Olá prezados.

Seguinte, eu tenho um arquivo razoavelmente grande.
Por exemplo:

1;524;1681;2031;63
0;525;1682;2031;63
1;554;1683;2031;64
0;559;1684;2031;64
1;574;1685;2031;67
0;575;1686;2031;67
1;401;1687;2031;69
0;403;1688;2031;89
1;549;1689;2031;84
0;556;1690;2031;84
1;558;1691;2031;95
0;560;1692;2031;95
1;583;1693;2031;98
0;584;1694;2031;98

O que eu precisaria era fazer uma comparação entre a primeira linha (1) e a linha de baixo (0) com todas elas.

Exemplo da busca:
Em cada linha (1) eu iria comparar com a de baixo(0) buscando o valor "555" na segunda coluna

Queria que me retornasse:
1;554;1683;2031;64
0;559;1684;2031;64
1;549;1689;2031;84
0;556;1690;2031;84


Eu até consegui fazer algo com o grep + cut comparando com if etc,etc..
Mas como são milhares de linhas a consulta demora muito.

Como eu ainda sou iniciante na criação de scripts queria pedir uma ajudinha :)
Agradecido!!!


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 29/01/2022 - 14:56h

Brunoro escreveu:
Opa, bom dia
Então a questão do "555" é o que eu preciso buscar, que está entre o 1 e o 0 ou como você pontuou (impar par).
Se impar for menor ou igual a "555" e par for maior retornar a linha as linhas. Como tentei explicar no exemplo.

Boa tarde Bruno.
Segue:
awk 'NR%2==1 {printf "%s;",$0} NR%2==0{print $0}' texto.txt|gawk -F";" '$2<=555 && $7>555{print gensub(/[;]/, "\n", "5", $0)}' 


Obs: Como é um arquivo grande, sugiro que faça em duas etapas:
awk 'NR%2==1 {printf "%s;",$0} NR%2==0{print $0}' texto.txt >> arq_temp.txt
wait
gawk -F";" '$2<=555 && $7>555{print gensub(/[;]/, "\n", "5", $0)}' arq_temp.txt

1;554;1683;2031;64
0;559;1684;2031;64
1;549;1689;2031;84
0;556;1690;2031;84

---------------------------------------------
Considerei:
Se campo 2 da linha impar <= "555" e campo 2 da linha par > "555", retorna as duas linhas.
---------------------------------------------
O 1º awk junta as linhas "Impar par"
O 2º awk, valida os campos.
É isso.....
______________________________________________________________________
RECIPROCIDADE:
Se te ajudei, me ajude e ajude o outros usuários.
Marque o tópico como resolvido e ESCOLHA a MELHOR RESPOSTA.

----------------------------------------------------------------------------------------------------------------
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________


3. Re: Usando Shell para Busca em Arquivo de texto

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 28/01/2022 - 19:22h

Brunoro escreveu:

Olá prezados.

Seguinte, eu tenho um arquivo razoavelmente grande.
Por exemplo:

1;524;1681;2031;63
0;525;1682;2031;63
1;554;1683;2031;64
0;559;1684;2031;64
1;574;1685;2031;67
0;575;1686;2031;67
1;401;1687;2031;69
0;403;1688;2031;89
1;549;1689;2031;84
0;556;1690;2031;84
1;558;1691;2031;95
0;560;1692;2031;95
1;583;1693;2031;98
0;584;1694;2031;98

O que eu precisaria era fazer uma comparação entre a primeira linha (1) e a linha de baixo (0) com todas elas.

Exemplo da busca:
Em cada linha (1) eu iria comparar com a de baixo(0) buscando o valor "555" na segunda coluna
Esse '555', é fixo, não tem relação com a linha "1" / Impar ...?

Queria que me retornasse:
1;554;1683;2031;64
0;559;1684;2031;64
1;549;1689;2031;84
0;556;1690;2031;84


Eu até consegui fazer algo com o grep + cut comparando com if etc,etc..
Mas como são milhares de linhas a consulta demora muito.

Como eu ainda sou iniciante na criação de scripts queria pedir uma ajudinha :)
Agradecido!!!


Boa noite Bruno.
Tentando entender....
Para cada linha Impar, buscar na linha abaixo (Par), por '555', e isso?
1;524;1681;2031;63 Impar
0;525;1682;2031;63 Par
1;554;1683;2031;64 Impar
0;559;1684;2031;64 Par
1;574;1685;2031;67 Impar
0;575;1686;2031;67 Par
1;401;1687;2031;69 Impar
0;403;1688;2031;89 Par
1;549;1689;2031;84 Impar
0;556;1690;2031;84 Par
1;558;1691;2031;95 Impar
0;560;1692;2031;95 Par
1;583;1693;2031;98 Impar
0;584;1694;2031;98 Par

No seu exemplo, não localizei o '555', na coluna 02.....
---------------------------------------------------------------------
Queria que me retornasse:
1;554;1683;2031;64
0;559;1684;2031;64
1;549;1689;2031;84
0;556;1690;2031;84

Recomendo o uso do awk
______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



4. Re: Usando Shell para Busca em Arquivo de texto [RESOLVIDO]

leandro peçanha scardua
leandropscardua

(usa Ubuntu)

Enviado em 28/01/2022 - 22:07h


Também não entendi muito bem o exemplo não.


5. Re: Usando Shell para Busca em Arquivo de texto [RESOLVIDO]

bruno vieira
Brunoro

(usa Arch Linux)

Enviado em 29/01/2022 - 08:28h


msoliver escreveu:

Brunoro escreveu:

Olá prezados.

Seguinte, eu tenho um arquivo razoavelmente grande.
Por exemplo:

1;524;1681;2031;63
0;525;1682;2031;63
1;554;1683;2031;64
0;559;1684;2031;64
1;574;1685;2031;67
0;575;1686;2031;67
1;401;1687;2031;69
0;403;1688;2031;89
1;549;1689;2031;84
0;556;1690;2031;84
1;558;1691;2031;95
0;560;1692;2031;95
1;583;1693;2031;98
0;584;1694;2031;98

O que eu precisaria era fazer uma comparação entre a primeira linha (1) e a linha de baixo (0) com todas elas.

Exemplo da busca:
Em cada linha (1) eu iria comparar com a de baixo(0) buscando o valor "555" na segunda coluna
Esse '555', é fixo, não tem relação com a linha "1" / Impar ...?

Queria que me retornasse:
1;554;1683;2031;64
0;559;1684;2031;64
1;549;1689;2031;84
0;556;1690;2031;84


Eu até consegui fazer algo com o grep + cut comparando com if etc,etc..
Mas como são milhares de linhas a consulta demora muito.

Como eu ainda sou iniciante na criação de scripts queria pedir uma ajudinha :)
Agradecido!!!


Boa noite Bruno.
Tentando entender....
Para cada linha Impar, buscar na linha abaixo (Par), por '555', e isso?
1;524;1681;2031;63 Impar
0;525;1682;2031;63 Par
1;554;1683;2031;64 Impar
0;559;1684;2031;64 Par
1;574;1685;2031;67 Impar
0;575;1686;2031;67 Par
1;401;1687;2031;69 Impar
0;403;1688;2031;89 Par
1;549;1689;2031;84 Impar
0;556;1690;2031;84 Par
1;558;1691;2031;95 Impar
0;560;1692;2031;95 Par
1;583;1693;2031;98 Impar
0;584;1694;2031;98 Par

No seu exemplo, não localizei o '555', na coluna 02.....
---------------------------------------------------------------------
Queria que me retornasse:
1;554;1683;2031;64
0;559;1684;2031;64
1;549;1689;2031;84
0;556;1690;2031;84

Recomendo o uso do awk
______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



Opa, bom dia
Então a questão do "555" é o que eu preciso buscar, que está entre o 1 e o 0 ou como você pontuou (impar par).
Se impar for menor ou igual a "555" e par for maior retornar a linha as linhas. Como tentei explicar no exemplo.





  



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts