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: LUIZ GUSTAVO RODRIGUES DE OLIVEIRA
Subject: Re: [shell-script] Comparando registros.
Date: Wed, 7 Mar 2012 06:27:53 -0800 (PST)

Rodrigo me manda os arquivos para que eu possa dar uma analizada e dar uma 
estudada de como ele pode ser feito usando array associativos.

address@hidden


Luiz Gustavo




>________________________________
> De: Julio C. Neves <address@hidden>
>Para: address@hidden 
>Enviadas: Quarta-feira, 7 de Março de 2012 8:37
>Assunto: Re: [shell-script] Comparando registros.
> 
>Deve ser mais fácil migrar para um S.O. que realmente mereça ser chamado do
>S.O. ... ;)
>
>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 6 de março de 2012 20:52, Rodrigo Boechat <
>address@hidden> escreveu:
>
>> **
>>
>>
>> Valtoir,
>>
>> Eu descobri a origem do erro.
>> Eis a primeira linha dos arquivos de registro:
>>
>> Windows Registry Editor Version 5.00
>>
>> Isso faz com que na primeira execução do while, o script execute a linha:
>>
>> registroPadrao["$chavePadrao"]+="$linhaPadrao#;#"
>>
>> Só que a $chavePadrao ainda não foi definida.
>> Não tem como criar um elemento de vetor de nome vazio; fato.
>>
>> Beleza. O problema inicial foi resolvido. Agora...
>>
>> Quando eu executei o script sem o erro tive o seguinte retorno no
>> arquivo de resultado:
>>
>> HKEY_LOCAL_MACHINE#;#
>> HKEY_LOCAL_MACHINEHARDWAREACPIDSDTVBOX__#;#
>> HKEY_LOCAL_MACHINEHARDWAREACPIDSDTVBOX__VBOXBIOS00000002#;#
>> HKEY_LOCAL_MACHINEHARDWAREACPIDSDTVBOX__VBOXBIOS#;#
>> HKEY_LOCAL_MACHINEHARDWAREACPI#;#
>> HKEY_LOCAL_MACHINEHARDWARE#;#
>> HKEY_LOCAL_MACHINEHARDWAREACPIDSDT#;#
>>
>> Ou seja, tudo errado. A ideia da lógica até e válida, mas ainda não
>> consegui entender porque não houve a concatenação de linhas.
>> Sem falar no fato da linha:
>>
>> chaveUsada=${chaveUsada//\\/_barra_}
>>
>> Não ter surtido efeito.
>> :(
>>
>> Ainda não desisti da parada, porque acredito que vai ser maneiro termos
>> uma solução correta com arrays associativos; para o futuro.
>>
>> Bom.
>> A questão de criar um arquivo para cada chave descartei. Eu mesmo já
>> tinha pensado nisso, mas nem comecei a mexer com isso justamente
>> pensando no tamanho do IO gerado; desnecessário ao meu ver.
>> Imagine você gerar e comparar por volta de trinta mil arquivos, e
>> deletá-los depois.
>> Sem falar que uma instalação de Office2007 aumentou o registro em mais
>> de 10MB...
>> Imagine um registro com meses ou anos de uso e instalações...
>> @_@
>>
>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>> - - - - - - - - - - - - - - - - - - - -
>> Alysson,
>>
>> Adaptei o script para agrupar em uma linha as chaves e seus registros,
>> usando o sed que o Robson passou anteriormente.
>> Aparentemente, consegui obter o resultado esperado, mas ainda não vou
>> comemorar porque quero realizar mais testes com outros arquivos de
>> registro.
>> Ainda assim, estou feliz com o que aprendi até aqui e com o primeiro
>> resultado "correto".
>>
>> Bem. No zero hora de hoje para amanhã, instalarei uma nova maquina xp na
>> minha vm a fim de fazer mais testes.
>>
>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>> - - - - - - - - - - - - - - - - - - - -
>> Todos,
>>
>> O resultado da bagaça é encontrado em:
>> http://pastebin.com/HVn8WRCw
>>
>> *** Se alguém se interessar em testar também ou ajudar a resolver o
>> problema usando arrays associativos, eu mando os dois arquivos
>> [antes.reg e usado.reg] compactados para seu email pessoal. São os dois
>> arquivos que eu usei como base para tudo isso.
>> A compactação deve ser boa, já que os arquivos são de texto.
>>
>> Obrigado pela ajuda até aqui.
>>
>> Grande abraço!
>> Rodrigo Boechat
>>
>> Em 06-03-2012 16:25, Valtoir escreveu:
>> > Só por comentar, mesmo.
>> >
>> > Pensei em outra forma de resolver o problema: criar um arquivo para cada
>> > chave do registro, e colocar os valores dentro de cada arquivo. Algo como
>> >
>> > ------------------------------------
>> > sed -i 's#\\#.#g' $padraoUnix
>> >
>> > mkdir /tmp/PadraoUnix
>> >
>> > while read linhaPadrao; do
>> > if [ "${linhaPadrao:0:1}" == "[" ]; then
>> > chavePadrao=${linhaPadrao#[}
>> > chavePadrao=${chavePadrao%]}
>> > touch /tmp/PadraoUnix/$chavePadrao
>> > else
>> > echo $linhaPadrao>> /tmp/PadraoUnix/$chavePadrao
>> > fi
>> > done< $padraoUnix
>> >
>> > -----------------------------------
>> >
>> > Depois de fazer isso também com "UsadoUnix", mandar ver um diff nos
>> > diretórios cujos nomes de arquivos sejam as chaves de registro e seus
>> > conteúdos os registros em si. Não sei se fui claro, e meu exemplo acima
>> não
>> > foi testado.
>> >
>> > Só acho uma ideia meio maluca devido ao i/o no sistema de arquivos, mas
>> de
>> > qualquer forma é uma ideia.
>> >
>> > Valtoir
>> >
>> >
>> > Em 5 de março de 2012 16:46, Alysson Gonçalves de Azevedo<
>> > address@hidden> escreveu:
>> >
>> >> **
>> >>
>> >>
>> >> $ cat arq.old
>> >> linha igual
>> >> linha velha
>> >> linha igual
>> >>
>> >> $cat arq.new
>> >> linha igual
>> >> linha nova
>> >> linha igual
>> >>
>> >> $ diff --changed-group-format='%>' --unchanged-group-format='' arq.new
>> >> arq.old
>> >> linha velho
>> >>
>> >> Depois é só redirecionar a saída.
>> >>
>> >> Tem um argumento do diff, --GTYPE-group-format=GFMT que funciona assim:
>> >> GTYPE pode ser old, new, changed, unchanged.
>> >> GFMT pode ser '%>' , '%<' ou '%=' (tem outras opções tb, mas vou ficar
>> >> nessas)
>> >>
>> >> melhor do que eu explicar um por uma, é melhor vc ir testando e vendo os
>> >> resultados (é mais fácil usar apenas um argumento de cada vez) exemplo
>> >> abaixo.
>> >>
>> >> $ diff --changed-group-format='%<' arq.new arq.old
>> >> linha igual
>> >> linha novo
>> >> linha igual
>> >> $ diff --changed-group-format='%>' arq.new arq.old
>> >> linha igual
>> >> linha velho
>> >> linha igual
>> >>
>> >>
>> >> Alysson Gonçalves de Azevedo
>> >> (11) 8491-7730
>> >>
>> >> Em 5 de março de 2012 13:48, Valtoir<address@hidden> escreveu:
>> >>
>> >>
>> >>> Opa,
>> >>>
>> >>> Por acaso o erro não ocorre quando o registro é um hex? Se for, isso
>> >> ocorre
>> >>> porque registros hex não são gravados entre aspas. Por isso aquela
>> linha
>> >>>
>> >>> sed 's#\\#barra#g;/^$/d;s#=hex#=\"hex#' $1
>> >>>
>> >>> Detalhe: a linha acima só coloca as aspas no início do registro :-P, as
>> >>> aspas finais, no exemplo que te dei, são colocadas naquele else lá
>> >> embaixo.
>> >>> Chamo essa técnica de e-gop, sigla para Extreme Gambiarra Oriented
>> >>> Programming. Ela não deve ser usada, estava com pressa quando escrevi.
>> O
>> >>> ideal é usar o mesmo sed pra colocar as aspas finais.
>> >>>
>> >>> Alguém da lista com mais experiência em sed consegue te ajudar com isso
>> >>> (adequar o sed acima pra também colocar as aspas no final da linha).
>> >>>
>> >>> Vai repassando tuas experiências aí, o assunto me parece interessante.
>> De
>> >>> qualquer forma, a (tentativa de) solução que te passei é meio maluca,
>> mas
>> >>> talvez dê pra extrair alguma coisa dela,
>> >>>
>> >>> T+
>> >>>
>> >>> Valtoir
>> >>> Em 5 de março de 2012 13:17, Rodrigo Boechat<
>> >>> address@hidden> escreveu:
>> >>>
>> >>>> **
>> >>>>
>> >>>> Júlio,
>> >>>> Obrigado pela resposta.
>> >>>>
>> >>>> O arquivo original não tem apenas duas ou três linhas de atributos,
>> >>>> abaixo do nome da chave.
>> >>>> Tem chave com 10 atributos...
>> >>>> Gostei da sua linha super simples, mas pra mim ficou complexo usá-la
>> >>>> numa situação dessas.
>> >>>> Também, em testes não consegui comparar os arquivos com um registro
>> por
>> >>>> linha.
>> >>>>
>> >>>> - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
>> >>>> Alysson,
>> >>>> Obrigado pela resposta.
>> >>>>
>> >>>> No consegui usar o "diff" para comparação de linhas, somente o "comm".
>> >>>> talvez tenha sido meu cansaço mental... Bem. Você poderia citar um
>> >>>> exemplo com "diff" para criar o arquivo 3.txt com conteúdo que há em
>> >>>> 2.txt que não existe em 1.txt?
>> >>>>
>> >>>>
>> >>>> - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
>> >>>>
>> >>>> Robson,
>> >>>> Obrigado pela resposta.
>> >>>>
>> >>>> 1) Não é bem por aí... Eu trabalho em turno de revesamento.
>> >>>> Quando estou de 00h~08h, levo meu note para o trampo para ajudar
>> passar
>> >>>> o tempo.
>> >>>> As vezes jogo, as vezes fico "shelleando", as vezes fico automatizando
>> >>>> planilhas de excel para o povo do adm... Essas coisas. ^_^"
>> >>>>
>> >>>> 2) Deu certo para o exemplo que passei, mas não para os arquivos de
>> >>>> registro.
>> >>>> Pesquisei e finalmente consegui entender o porque da bagaça não ter
>> >>>> funcionado.
>> >>>> Simples e complexamente, o raio do editor de registro do windows usa
>> >> uma
>> >>>> codificação de caractere diferente do ISO. Usa o "utf-16le" aí deu
>> >> muito
>> >>>> problema porque o as expressões com "^\[", por exemplo, não conseguiam
>> >>>> encontrar as linhas que começavam com "[".
>> >>>> Descobri esse comando abaixo:
>> >>>> $ file -i antes.reg
>> >>>> antes.reg: text/plain; charset=utf-16le
>> >>>>
>> >>>> Aí descobri como alterar a codificação de caractere:
>> >>>> $ iconv --from-code=utf-16le --to-code=UTF-8 antes.reg -o
>> >> antes.utf8.reg
>> >>>> Foi realmente complexo chegar nesse ponto, porque até eu lembrar da
>> >>>> possibilidade da codificação de caracteres, bati MUITA cabeça com
>> >>>> códigos, e mais códigos, e pesquisas, e pesquisas...
>> >>>> @_@
>> >>>>
>> >>>> Bem. No final das contas a solução de colocar as chaves e seus
>> >> atributos
>> >>>> em uma única linha, não deu certo.
>> >>>> Infelizmente, quando executei o "comm" com os dois arquivos ele
>> >> reclamou
>> >>>> que os arquivos não eram ordenados.
>> >>>> E até o dado momento, eu não consegui imaginar como ordenar igualmente
>> >>>> os dois arquivos, visto que um arquivo possui, por exemplo:
>> >>>> [A\MONTE\DE\COISA]
>> >>>> [C\MONTE\DE\COISA]
>> >>>>
>> >>>> E o outro:
>> >>>> [A\MONTE\DE\COISA]
>> >>>> [B\MONTE\DE\COISA]
>> >>>> [C\MONTE\DE\COISA]
>> >>>>
>> >>>> Desse jeito, mesmo usando o "sort" a coisa fica desordenada.
>> >>>> :(
>> >>>>
>> >>>>
>> >>>> - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
>> >>>>
>> >>>> Valtoir.
>> >>>> Obrigado pela resposta!
>> >>>>
>> >>>> Bom. Baseado no script que você criou para gerar o array, fiz um
>> >> script,
>> >>>> mas quando eu o executo, ele apresenta erro nas linhas 31 e 41.
>> >>>>
>> >>>> http://pastebin.com/DkxY6a73
>> >>>>
>> >>>> $ ./diferencaRegistro.bash antes.reg usado.reg
>> >>>> ./diferencaRegistro.bash: linha 31: registroPadrao["$chavePadrao"]:
>> >>>> índice da matriz (array) incorreto
>> >>>> ./diferencaRegistro.bash: linha 41: registroUsado[$chaveUsada]: índice
>> >>>> da matriz (array) incorreto
>> >>>>
>> >>>> Até agora não consegui compreender o que eu fiz errado. E eu estou
>> >>>> evitando ao máximo realizar testes, já que o "antes.reg" tem
>> 30,8MB!!!!
>> >>>> E o usado 40,2MB!!!! Olha que a única diferença de um pro outro é uma
>> >>>> instalação do Office2007.
>> >>>>
>> >>>> Hoje no meu zero hora eu testarei o seu script e estudarei um jeito de
>> >>>> aplicá-lo na comparação, caso o meu não tenha salvação.
>> >>>>
>> >>>> Grato a todos,
>> >>>> Rodrigo Boechat
>> >>>>
>> >>>> Em 29-02-2012 18:31, Valtoir escreveu:
>> >>>>
>> >>>>> Mais uma coisa: para listar o conteúdo dos arrays, rode a linha
>> >> abaixo:
>> >>>>> grep ^declare gerarray.sh | sed 's/declare -A /echo
>> >> \$\{/;s/$/[@]}/'>>
>> >>>>> gerarray.sh
>> >>>>>
>> >>>>> e depois rode o script gerarray.sh
>> >>>>>
>> >>>>> Valtoir
>> >>>>>
>> >>>>> Em 29 de fevereiro de 2012 18:03, Valtoir<address@hidden
>> >>>>> escreveu:
>> >>>>>
>> >>>>>> Boa tarde,
>> >>>>>>
>> >>>>>> Salve o script a seguir, depois rode-o passando como parâmetro o
>> >>> arquivo
>> >>>>>> de registro. Ele deve criar um outro script chamado gerarray.sh com
>> >> os
>> >>>>>> comandos para gerar os arrays.
>> >>>>>>
>> >>>>>> Rode por sua conta e risco ;-)
>> >>>>>>
>> >>>>>> ----------------------------------------------------------
>> >>>>>> #/bin/bash
>> >>>>>> rm gerarray.sh
>> >>>>>> rm lixo
>> >>>>>> sed 's#\\#barra#g;/^$/d;s#=hex#=\"hex#' $1>> lixo
>> >>>>>> while read linha; do
>> >>>>>> if [ $(echo $linha | grep "^\[") ]; then
>> >>>>>> chave=$(echo $linha | grep "^\[.*\]" | sed 's#\[##;s#]##')
>> >>>>>> echo "declare -A $chave">> gerarray.sh
>> >>>>>> else
>> >>>>>> echo $linha | grep -v "\"$"&& linha=${linha}\"
>> >>>>>> echo ${chave}$( echo ${linha} | sed 's#^\"#[#;s#\"#]#')>>
>> >>>>>> gerarray.sh
>> >>>>>> fi
>> >>>>>> done< lixo
>> >>>>>> chmod +x gerarray.sh
>> >>>>>>
>> >>>>>> ----------------------------------------------------------
>> >>>>>>
>> >>>>>> Antes que esqueça, ele substitui as contrabarras das chaves de
>> >>> registro
>> >>>>>> pela string "barra", já que a contrabarra em si gera erro ao tentar
>> >>>> criar
>> >>>>>> os arrays.
>> >>>>>>
>> >>>>>> T+
>> >>>>>>
>> >>>>>> Valtoir
>> >>>>>>
>> >>>>>>
>> >>>>>> Em 29 de fevereiro de 2012 11:41, Robson Alexandre<
>> >>>>>> address@hidden> escreveu:
>> >>>>>>
>> >>>>>> **
>> >>>>>>> Rodrigo,
>> >>>>>>> deixe-me fazer algumas considerações antes de expor meu ponto de
>> >>> vista.
>> >>>>>>> 1º Dormir pra quê, não é mesmo. Vc me manda msg as 4:05 da manhã de
>> >>>>>>> uma madrugada de sexta pra sábado (Deve ter chegado da balada e
>> >>>>>>> enviado o email.).
>> >>>>>>> 2º Acredito que seu arquivo exemplo veio com as quebras de linha
>> >>>>>>> desconfiguradas graças ao gmail.
>> >>>>>>> Assim fica minha dúvida:
>> >>>>>>> As chaves dos registros começam com [HKEY...] e termina com \n\n?
>> >>>>>>> Partindo deste princípio podemos aplicar esse sed :
>> >>>>>>>
>> >>>>>>> sed -n 's/\[/}\n\[/g;$s/$/\n}/;p' $REG | sed -n
>> >>>>>>> '/\[/{:inicio;/}/!{N;binicio};s/\n//g;s/}//g;p}'
>> >>>>>>>
>> >>>>>>> Então coloquei no pastebin do jeito que acho que a formatação do
>> >>>>>>> arquivoo de registro deve estar
>> >>>>>>> http://pastebin.com/YjQ5dQMi
>> >>>>>>>
>> >>>>>>> Acredito que deve haver solução mais simples, mas o fator tempo não
>> >>>>>>> deixou aperfeiçoar a solução.
>> >>>>>>> A partir dai vc pode colocar [Registro]=Atributos,Atributos da
>> >> forma
>> >>>>>>> como vc achar conveniente.
>> >>>>>>> Eu estava esperando a solução com arrays, pois pretendo aplicá-la
>> >> em
>> >>>>>>> outro problema, por exemplo quando vc tem um csv e pra cada campo
>> >>>>>>> separado por ; vc quer atribuir uma variavel deum vez só e não
>> >>> fazendo
>> >>>>>>> infinitos cut -f -d pra cada variavel.
>> >>>>>>> Bom, veja ai e diga-nos o que acha.
>> >>>>>>>
>> >>>>>>> Att
>> >>>>>>> Robson Alexandre
>> >>>>>>>
>> >>>>>>> Em 26 de fevereiro de 2012 15:19, Julio C. Neves
>> >>>>>>> <address@hidden> escreveu:
>> >>>>>>>
>> >>>>>>>> Se não conseguir implementar a dica do Alysson (de juntar tudo em
>> >>> uma
>> >>>>>>>> linha), outra coisa que vc poderia fazer seria:
>> >>>>>>>>
>> >>>>>>>> saida do comm | xargs -i grep -B2 {} arquivo
>> >>>>>>>>
>> >>>>>>>> Por falar em xargs, para juntar cada 3 linhas em uma (proposta do
>> >>>>>>> Alisson),
>> >>>>>>>> faça:
>> >>>>>>>>
>> >>>>>>>> cat arquivo | xargs -L3.
>> >>>>>>>> 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 20:44, Rodrigo Boechat<
>> >>>>>>>> address@hidden> escreveu:
>> >>>>>>>>
>> >>>>>>>>> **
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> 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]
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>> [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]
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> ------------------------------------
>> >>>>>
>> >>>>> ----------------------------------------------------------
>> >>>>> 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]
>> >>>>
>> >>>>
>> >>>>
>> >>>
>> >>> [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]
>> >>
>> >>
>> >>
>> >
>> > [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]
>>
>
>>
>
>
>[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]