criar um shell [RESOLVIDO]

1. criar um shell [RESOLVIDO]

sergio de oliveira
sergio.mso

(usa Red Hat)

Enviado em 06/07/2016 - 15:07h

Pessoal
Consegue me ajudar com a criação de um scripts?
Tenho dois arquivos

ARQUIVO1.TXT
com seguinte registros:

000001: FARMACEUTICA
000002: INDUSTRIA
000003: COMERCIO
000004: ACESSORIOS
000005: EMBALAGEMS
000007: LOJAS E ATACADOS


ARQUIVO2.TXT
com seguinte registros:

000001:
000002:
000003:
000004:
000005:
000006:

Como faço para listar os registros que tem na TABELA1.TXT e não tem na TABELA2.TXT

No caso acima só me mostraria o resultado todo que seria o registro 000007: LOJAS E ATACADOS



  


2. Re: criar um shell [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 06/07/2016 - 15:52h

sergio.mso escreveu:

Pessoal
Consegue me ajudar com a criação de um scripts?
Tenho dois arquivos

ARQUIVO1.TXT
com seguinte registros:

000001: FARMACEUTICA
000002: INDUSTRIA
000003: COMERCIO
000004: ACESSORIOS
000005: EMBALAGEMS
000007: LOJAS E ATACADOS


ARQUIVO2.TXT
com seguinte registros:

000001:
000002:
000003:
000004:
000005:
000006:
Como faço para listar os registros que tem na TABELA1.TXT e não tem na TABELA2.TXT
No caso acima só me mostraria o resultado todo que seria o registro 000007: LOJAS E ATACADOS

---------------------------------------------------------------------------
Boa tarde Sergio.
os ID's do ARQUIVO1.TXT não seguem a ordem numérica?

No aguardo,
Marcelo Oliver



3. Re: criar um shell [RESOLVIDO]

Evanir de Oliveira Junior
Evol

(usa Outra)

Enviado em 06/07/2016 - 16:01h

Os 2 arquivos tem as mesmas colunas ou o segundo tem somente os numeros ?


4. Re: criar um shell [RESOLVIDO]

sergio de oliveira
sergio.mso

(usa Red Hat)

Enviado em 06/07/2016 - 16:05h

Muito Obrigado pelo retorno.

isso eu errei, segue novamente.
Tem a mesma numeração. Queria mostrar os registro que tem no arquivo1.txt e não tem no arquivo2.txt. Detalhe:
Teria que me mostrar o registro inteiro da linha como ex: 000007: LOJAS E ATACADOS


ARQUIVO1.TXT
com seguinte registros

000001: FARMACEUTICA
000002: INDUSTRIA
000003: COMERCIO
000004: ACESSORIOS
000005: EMBALAGEMS
000006: ATACADO
000007: LOJAS E ATACADOS

ARQUIVO2.TXT

com seguinte registros
000001:
000002:
000003:
000004:
000005:
000006:


5. Re: criar um shell [RESOLVIDO]

sergio de oliveira
sergio.mso

(usa Red Hat)

Enviado em 06/07/2016 - 16:07h

O primeiro arquivo1.txt traz a coluna toda e o arquivo2.txt traz somente o codigo


6. Re: criar um shell

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 06/07/2016 - 16:17h

sergio.mso escreveu:

Muito Obrigado pelo retorno.

isso eu errei, segue novamente.
Tem a mesma numeração. Queria mostrar os registro que tem no arquivo1.txt e não tem no arquivo2.txt. Detalhe:
Teria que me mostrar o registro inteiro da linha como ex: 000007: LOJAS E ATACADOS
ARQUIVO1.TXT
com seguinte registros

000001: FARMACEUTICA
000002: INDUSTRIA
000003: COMERCIO
000004: ACESSORIOS
000005: EMBALAGEMS
000006: ATACADO
000007: LOJAS E ATACADOS

ARQUIVO2.TXT

com seguinte registros
000001:
000002:
000003:
000004:
000005:
000006:


Sergio, veja se é isso que deseja.
Segue:

#!/bin/bash
while IFS=": " read -r C1 C2;do
[ $(egrep -o "$C1" FILE02) ] || { awk -F": " '/^'$C1':/ {print $0}' FILE01 ; }
done < FILE01


SAíDA:
000007: LOJAS E ATACADOS 


E não esqueça . . . :)
Se a resposta foi satisfatória, marque a como a MELHOR. . .
Assim sou pontuado, o que incentiva a continuar compartilhando conhecimento . . .

att.:
Marcelo Oliver


7. Re: criar um shell [RESOLVIDO]

sergio de oliveira
sergio.mso

(usa Red Hat)

Enviado em 06/07/2016 - 16:55h

MARCELO,
MUITO OBRIGADO


MAIS UMA COISA
APARECEU PARA MIM DOIS ARQUIVOS NESTE FORMATO ABAIXO COMEÇANDO AES- EU CONSIGO USAR ESTE SCRIPT QUE VOCÊ ME PASSOU?

ARQUIVO1.TXT

AES-00001: FARMACEUTICA
AES-00002: INDUSTRIA
AES-00003: COMERCIO
AES-00004: ACESSORIOS
AES-00005: EMBALAGEMS
AES-00006: ATACADO
AES-00007: LOJAS E ATACADOS

ARQUIVO2.TXT
AES-00001:
AES-00002:
AES-00003:
AES-00004:
AES-00005:
AES-00006:
AES-00007:



8. Re: criar um shell

Evanir de Oliveira Junior
Evol

(usa Outra)

Enviado em 06/07/2016 - 17:00h

#!/bin/bash
awk '{ print $1}' TABELA1.txt | while read in; do
if ! grep -q "$in" TABELA2.txt
then
grep "$in" TABELA1.txt
fi
done ;

Mas confesso que achei a opção acima mais "enxuta" que a minha, mas em todo caso mostra que ha vários meios de resolver um problema.
Outra dica é o livro do Julio Cesar Neves, "Programaçao Shell Linux".
https://www.youtube.com/watch?v=ryoH4wZTshw é uma entrevista com o cara.

Abraços
Evol
www.evol.inf.br



9. Re: criar um shell

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 06/07/2016 - 19:08h

sergio.mso escreveu:

MARCELO,
MUITO OBRIGADO
MAIS UMA COISA
APARECEU PARA MIM DOIS ARQUIVOS NESTE FORMATO ABAIXO COMEÇANDO AES- EU CONSIGO USAR ESTE SCRIPT QUE VOCÊ ME PASSOU?
ARQUIVO1.TXT
AES-00001: FARMACEUTICA
AES-00002: INDUSTRIA
AES-00003: COMERCIO
AES-00004: ACESSORIOS
AES-00005: EMBALAGEMS
AES-00006: ATACADO
AES-00007: LOJAS E ATACADOS

ARQUIVO2.TXT
AES-00001:
AES-00002:
AES-00003:
AES-00004:
AES-00005:
AES-00006:
AES-00007:


----------------------------------------------------------------------
Boa noite sergio.mso.
Funciona sim, só "não pega" nada pq os dois arquivos tem a mesma quantidade de registros.....
Explicando o script:
linha a linha de ARQUIVO1
Usa como separador de campo, ("IFS") ": " (dois pontos mais espaço)
Atribui o valor do CAMPO1 a VAR "C1" e do CAMPO2 a VAR "C2"
Procura por "C1" no ARQUIVO2
egrep -o "$C1" FILE02
TESTA
Se o TEST for FALSO (NãO encontrar o que procurou...)
[ $(egrep -o "$C1" FILE02) ] ||
MOSTRA o resultado
awk -F": " '/^'$C1':/ {print $0}' FILE01
done < FILE01

Enfim, para usar em arquivos com outro "IFS", é só trocar no script.
Por exemplo, se o IFS é #, faça:

while IFS="#" read -r C1 C2;do
[ $(egrep -o "$C1" FILE02) ] || { awk -F": " '/^'$C1':/ {print $0}' FILE01 ; }
done < FILE01

É isso . . .

Não esqueça de marcar como a MELHOR RESPOSTA . . . :)
Att.:
Marcelo Oliver



10. Re: criar um shell [RESOLVIDO]

sergio de oliveira
sergio.mso

(usa Red Hat)

Enviado em 07/07/2016 - 16:00h

OBRIGADO MARCELO.
VOU APONTAR SIM PODE DEIXAR






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts