shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Comparando registros.


From: Rodrigo Boechat
Subject: Re: [shell-script] Comparando registros.
Date: Sat, 25 Feb 2012 20:44:33 -0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.2) Gecko/20120217 Thunderbird/10.0.2

Júlio, boa noite!
Obrigado pela resposta. Eu pensei nisso. Na verdade foi a primeira coisa 
que imaginei.
Mas caí num caso que não atendeu, ou que meu conhecimento limitado não 
soube solucionar.
O "comm" compara linha por linha e mostra a linha diferente.

O problema é o seguinte, digamos que o registro no padrão esteja assim:
[NOME\DA\CHAVE\00]
"Atributo00"=dword:valor00
"Atributo01"=dword:valor01

Já no usado, tenho o seguinte:
[NOME\DA\CHAVE\00]
"Atributo00"=dword:VALOR10
"Atributo01"=dword:valor01

O registro "[NOME\DA\CHAVE\00]" é diferente entre o padrão e o usado, 
mas eu receberia apenas '"Atributo00"=dword:VALOR10' de retorno.
A avaliação que preciso realizar, necessita do registro completo. Nesse 
caso, preciso do retorno:

[NOME\DA\CHAVE\00]
"Atributo00"=dword:VALOR10
"Atributo01"=dword:valor01

Como meu conhecimento ainda é limitado, você saberia resolver o caso sem 
usar arrays?

- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
-- -- -- -- -- -- -- -
Fernando, boa noite!
Obrigado pela resposta.

Eu descobri isso tentando. Não entendi porque o shell não torna um 
elemento de array em array; matriz.
mas já que a coisa é assim, eu pesquisei e já até tinha achado 
explicações sobre arrays associativos:

http://www.dicas-l.com.br/cantinhodoshell/cantinhodoshell_20100120.php#.T0lbjl-oOCg

Já conheço o meio de trabalhar com esse tipo de array, mas o que não 
consegui foi justamente, separar o registro e obter seus atributos em 
uma única linha.

Aproveitando o exemplo que dei para o Júlio, tentarei explicar melhor.
Registro padrão:

[NOME\DA\CHAVE\00]
"Atributo00"=dword:valor00
"Atributo01"=dword:valor01

chave='NOME\DA\CHAVE\00'
atributo="\"Atributo00\"=dword:valor00\n\"Atributo01\"=dword:valor01"
registroPadrao[$chave]=$atributo

Eu não preciso, neste instante, saber especificamente o que está 
diferente na chave.
Preciso apenas obter as chaves que possuem diferenças entre si.

Assim fica super simples comparar as chaves do padrão com o usado, pois 
ambos possuirão os mesmos nomes de chaves.
Eu faria algo assim:

registroUsado[$chave] É IGUAL A registroPadrão[$chave]

Se for diferente:
echo $chave >> arquivoDeSaida.txt
echo $atributos >> arquivoDeSaida.txt

Meu problema é separar as chaves e colocar todos seus atributos como um 
único valor no elemento correto do array associativo.
Tentei vários SEDs na busca pela resposta, mas só tive retorno toscos...
=/

Grato,
Rodrigo Boechat





Em 25-02-2012 18:05, Julio C. Neves escreveu:
> Será que com o uso do diff ou do comm vc não resolve essa trapalhada em uma
> linha somente?
>
> Abcs,
> Julio
> *Já foi lançado "Bombando o
> Shell<http://www.brasport.com.br/index.php?dispatch=products.view&product_id=666>
> ". *
> *Show **de interfaces gráficas sob Shell!*
> *
> *
>
>
>
> Em 25 de fevereiro de 2012 04:05, Rodrigo Boechat<
> address@hidden>  escreveu:
>
>> **
>>
>>
>> Pessoal, boa madrugada.
>>
>> Estou batendo cabeça com a seguinte situação:
>> Tenho um arquivo de backup de registro do windows e preciso analisá-lo
>> contra um registro "padrão" para verificar a diferença entre os dois.
>>
>> O que preciso e não estou conseguindo fazer é o seguinte: Pretendo criar
>> um array "dicionário" com os nomes das chaves do registro e atribuir
>> como valor todos os atributos das chaves em uma única linha.
>>
>> - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
>> Exemplo de registro:
>> [HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\1]
>> # REGISTRO
>> "Component
>> Information"=hex:00,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,ff # ATRIBUTO
>> "Identifier"="PCI"# ATRIBUTO
>> "Configuration
>> Data"=hex(9):05,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,05,\# ATRIBUTO
>> 00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,02,10,01,01# ATRIBUTO
>>
>> [HKEY_LOCAL_MACHINE\HARDWARE\ACPI\FACS]# REGISTRO
>> "00000000"=hex:46,41,43,53,40,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\#
>>
>> ATRIBUTO
>>
>> 00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,\#
>>
>> ATRIBUTO
>> 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00# ATRIBUTO
>>
>> [HKEY_LOCAL_MACHINE\HARDWARE\ACPI\FADT]# REGISTRO
>> # ATRIBUTO
>> [HKEY_LOCAL_MACHINE\HARDWARE\ACPI\FADT\VBOX__]# REGISTRO
>> # ATRIBUTO
>>
>> - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
>> Exemplo de resultado esperado:
>> registros[NOME\COMPLETO\DO\REGISTRO]=TODAS AS LINHAS DE ATRIBUTOS
>> AGRUPADAS NUMA SÓ, INCLUINDO AS LINHAS EM BRANCO.
>>
>> - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
>> Ficou fácil de compreender?
>>
>> Eu pretendo carregar dois arrays, um com o registro padrão e outro com o
>> "usado" para passar para um txt tudo que estiver diferente do padrão ou
>> não existir no padrão.
>> Acredito que eu consiga com um while, mas nem consegui criar os arrays
>> ainda.
>>
>> Bom, eu tentei seguir a ideia de um SED sinistro que o Robson Alexandre
>> passou:
>>
>> for cmd in INSERT SELECT DELETE UPDATE
>> do
>> sed -n "/${cmd}/{:a;/;/! {N;ba};s/\n/ /g;p}" arq.txt>  "${cmd}.txt"
>> done
>>
>> Não tive sucesso, embora eu já consiga compreender a estrutura.
>>
>> Alguém poderia me ajudar?
>>
>> Grato,
>> Rodrigo Boechat
>>
>> [As partes desta mensagem que não continham texto foram removidas]
>>
>>
>>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como 
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em 
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
>
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]