Sei sulla pagina 1di 19

O comando diff

com exemplos na rea biolgica

Jorge Luiz Soares de Pina

06 de novembro de 2014

O comando diff
diff uma ferramenta de linha de comando para plataforma Linux (Existe verso para Windows
disponvel em http://gnuwin32.sourceforge.net/) , que pode ser utilizada para comparar arquivos
e diretrios. Ele pode comparar somente dois arquivos, assim como pode comparar dois
diretrios inteiros, com vrios arquivos. As diferenas encontradas nesta comparao sero
exibidas no terminal onde voc executou o comando, podendo tambm, o que muito til, serem
direcionadas para um arquivo de texto. O comando utiliza um formato de sada especial que pode
ser entendido posteriormente pelo programa patch, permitindo que estas informaes sejam
utilizadas para atualizar um arquivo (diretrio) antigo com as modificaes identificadas pelo diff.

Sintaxe

Comparando dois arquivos:


diff [opes] [arquivo1] [arquivo2]
Comparando todos os arquivos dos diretrios old e new (compara arquivos homnimos):
diff [opes] old new

Opes mais comuns

-a :: compara os arquivos como arquivos de texto, ainda que no sejam.


-b :: ignora diferenas na quantidade de espao em branco.
-B :: ignora linhas em branco a mais ou a menos.
-E :: ignora as diferenas de tabulao.
-c :: utiliza o formato de sada contextual, exibindo linhas de contexto nas adjacncias das
modificaes .
-i :: ignora as diferenas de letras maisculas/minsculas.
-N :: trata arquivos ausentes na comparao como vazios.
-q :: mostra apenas se o contedo dos arquivos so ou no diferentes.
-r :: compara recursivamente todo o contedo de um diretrio.
-u [n] :: utiliza o formato de sada unificado e exibe [n] nmero de linhas de contexto nas
adjacncias das modificaes , alm de outras formataes complementares ao modo
contextual.
-y :: mostra os arquivos em duas colunas, indicando as diferenas.
-w :: ignora qualquer espao em branco.

Existem vrias outras opes que podem ser utilizadas com este comado. Para uma lista completa
consulte a documentao do comando (http://www.gnu.org/software/diffutils/manual/html_node/).
Se ao invs de enviar a sada para o terminal, voc quiser salvar em um arquivo, basta redirecionar
o fluxo de dados na forma:
ou

diff [opes] [arquivo1] [arquivo2] > arquivos.diff


diff [opes] old new > dircomp.diff

Os nomes arquivos e dircomp so simblicos e podem ser quaisquer. A extenso diff


tambm simblica e foi escolhida para ficar fcil lembrar-se do que se trata. Ela pode ser
qualquer, lembrando que o arquivo gerado um arquivo de texto.
Vamos considerar alguns exemplos. Para isto crie os arquivos de texto enzima-old.txt e
enzima-new.txt, conforme indicado a seguir. Os dois arquivos no so exatamente iguais. Como
o nome sugere o arquivo enzima-new.txt contm correes e atualizaes. Veremos como
utilizar o comando diff para verificar estas alteraes.

arquivo: enzima-old.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

Classificao das Enzimas


Hidrolases So aquelas enzimas que se associam a molculas de
gua para promoverem a quebra das ligaes covalentes.
Exemplo:
Ligases So responsveis por formar novas molculas atravs da
unio de duas j pr-existentes.
Exemplo: Sintetases.
Oxidoredutases So responsveis por efetuar a transferncia de
eltrons, ou seja, relizam oxi-reduo.
Exemplo: Desidrhogenases.
Transferases So aquelas enzimas que tem como finalidade realizar
a translocao de grupos funcionais tais como amina, carbonila,
carboxila, fosfato, de uma molcula para outra.
Exemplo: Quinase.
Liases Atuam na remoo de gua, gs carbnico e amnia, a partir
da ruptura de ligaes covalintes.
Pepsina.
Exemplo: Descarboxilase.
Isomerases Responsveis por mediar a converso de substncias
isomricas, sejam eles geomtricos ou pticos.
Exemplo: Epimerases.
Enzima + Cofator, chamamos de holoenzima

arquivo: enzima-new.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Classificao das Enzimas


As enzimas podem ser classificadas de acordo com vrios critrios. O
criterio mais importante foi o estabelecido pela Unio Internacional
de Bioqumica (IUB), e estabelece 6 classes:
Hidrolases So aquelas enzimas que se associam a molculas de
gua para promoverem a quebra das ligaes covalentes.
Exemplo: Peptidases.
Ligases So responsveis por formar novas molculas atravs da
unio de duas j pr-existentes.
Exemplo: Sintetases.
Oxidoredutases So responsveis por efetuar a transferncia de
eltrons, ou seja, relizam oxi-reduo.
Exemplo: Desidrogenases.
Transferases So aquelas enzimas que tem como finalidade realizar
a translocao de grupos funcionais tais como amina, carbonila,
carboxila, fosfato, de uma molcula para outra.
Exemplo: Quinase.
Liases Atuam na remoo de gua, gs carbnico e amnia, a partir
da ruptura de ligaes covalentes.
Exemplo: Descarboxilase.
Isomerases Responsveis por mediar a converso de substncias
isomricas, sejam eles geomtricos ou pticos.
Exemplo: Epimerases.
Fonte:http://www.estudopratico.com.br/enzimas-funcoes-e-classificacao/

Para compararmos os arquivos executemos o comando diff enzima-old.txt enzima-new.txt, em


um terminal aberto no mesmo diretrio onde voc salvou os arquivos. O resultado da execuo do
comando pode ser visto abaixo.
diferenas (enzima.diff)
1a2,5
> As enzimas podem ser classificadas de acordo com vrios critrios. O
> criterio mais importante foi o estabelecido pela Unio Internacional
> de Bioqumica (IUB), e estabelece 6 classes:
>
4c8
< Exemplo:
--> Exemplo: Peptidases.
12c16
< Exemplo: Desidrhogenases.
--> Exemplo: Desidrogenases.
20,21c24
< da ruptura de ligaes covalintes.
< Pepsina.
--> da ruptura de ligaes covalentes.
27c30,31
< Enzima + Cofator, chamamos de holoenzima
-->
> Fonte:http://www.estudopratico.com.br/enzimas-funcoes-e-classificacao/

Vamos analisar o resultado, que por si s parece bastante intuitivo. Os cdigos que aparecem na
sada do comando so da forma NletraM. Onde N so linhas referentes ao arquivo original
(primeiro arquivo passado para o comando), e M so linhas referentes ao arquivo atual (segundo
arquivo passado ao comando). Trs situaes podem ocorrer e so indicadas na forma:
letra = a (add), significa que aps a linha N do arquivo original foram acrescentadas as linhas
M no arquivo novo.
letra = c (change), significa que as linhas N do arquivo original foram modificadas pelas linhas
M no arquivo novo.
letra = d (delete), significa que as linhas N do arquivo original foram apagadas e o texto
continua a partir da linha M no arquivo novo.
No nosso exemplo, 1a2,5 significa que aps a linha 1 do arquivo enzima-old.txt devem ser
includas as linhas de 2 a 5 do arquivo enzima-new.txt. O smbolo > utilizado na frente das
linhas so um indicativo de linhas de incluso.
1a2,5
> As enzimas podem ser classificadas de acordo com vrios critrios. O
> criterio mais importante foi o estabelecido pela Unio Internacional
> de Bioqumica (IUB), e estabelece 6 classes:
>

A prxima codificao, 4c8 significa uma modificao. Ou seja, a linha 4 do arquivo


enzima-old.txt deve ser substituda pela linha 8 do arquivo enzima-new.txt. O smbolo <
utilizado na frente da linha um indicativo de linha de excluso, enquanto que o smbolo > um
indicativo de linha de incluso. O comando informa o contedo das linhas de excluso e de
incluso separadas por traos ---.
4c8
< Exemplo:
--> Exemplo: Peptidases.

A codificao 12c16 significa que a linha 12 do arquivo enzima-old.txt foi modificada e o texto
deve continuar na linha 16 do arquivo enzima-new.txt.
12c16
< Exemplo: Desidrhogenases.
--> Exemplo: Desidrogenases.

A codificao 20,21c24 significa que as linhas de 20 a 21 do arquivo enzima-old.txt foram


modificadas e o texto deve ser substitudo pela linha 24 do arquivo enzima-new.txt.
20,21c24
< da ruptura de ligaes covalintes.
< Pepsina.
--> da ruptura de ligaes covalentes.

A codificao 27a30,31 significa que aps a linha 27 do arquivo enzima-old.txt devem ser
includas as linhas de 30 a 31 do arquivo enzima-new.txt.
27a30,31
< Enzima + Cofator, chamamos de holoenzima
-->
> Fonte:http://www.estudopratico.com.br/enzimas-funcoes-e-classificacao/

Para salvar as informaes do comando diff em um arquivo neste exemplo basta executar o
comando na forma diff enzima-old.txt enzima-new.txt > enzima.diff. Assim, todas as
informaes da sada do comando estaro armazenadas no arquivo enzima.diff.
Esta maneira de utilizar o comando diff importante quando se pretende verificar qual verso
de algum texto contenha alguma atualizao que fizemos e estamos interessados. Este o caso de
um script que tenha sido alterado e tenha parado de funcionar e voc no sabe qual alterao seja
a responsvel. Isto, evidentemente, muito mais eficiente do que ficar lendo linha a linha entre os
dois scripts procurando alteraes. Para que tudo isto de certo, indispensvel que voc crie o
hbito de fazer uma cpia do arquivo atual, que esteja em funcionamento, e utilizar a nova verso
com as alteraes que voc pretenda introduzir. Vejamos ento um exemplo de modificao de
um script. Os arquivos getsmiles-old.bat e getsmiles-new.bat tratam da converso de arquivos
smi (formato smiles) em arquivo fpt (formato fingerprint) usando o programa babel. Copie e salve
os arquivos como indicado abaixo.

arquivo: getsmiles-old.bat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

:: getsmiles.bat
:: Autor: Jorge Pina
:: data: 01/08/2011
:: versao 1.1 - 02/08/2011
::
:: batch para ler conteudo de um diretorio
:: e converter os arquivos smi do diretorio
:: em arquivo fingerprint usando babel
::
:: uso: getsmiles nome_do_diretorio
::
:: a saida do comando (arquivos fpt) sera armazenada
:: em nome_do_diretorio.
::
:: ATENCAO: Se o nome do diretorio tiver espacos use aspas
:: Exemplo: getsmiles "nome do arquivo"
::
@echo off
if [%1] == [--help] goto HELP
set CURDIR=%cd%
cd %1
set SDIR="%cd%"
cd %CURDIR%
echo ::
echo :: getsmiles.bat - Autor: Jorge Pina - versao 1.1 - 02/08/2011
echo :: Utilize getsmiles.bat --help para obter ajuda.
if exist @smi del /f @smi
if exist @list del /f @list
set LIST=%SDIR%\*.smi
dir /b %LIST% > @list
For /f "tokens=* delims= " %%a in (@list) do @echo %%~na >> @smi
For /f %%b in (@smi) do babel %SDIR%\%%b.smi -ofpt -xs > %SDIR%\%%b.fpt
del /f @list
del /f @smi
:HELP
echo ::
echo :: Autor: Jorge Pina
echo :: data: 01/08/2011
echo :: versao 1.2 - 25/02/2014
echo ::
echo :: batch para ler conteudo de um diretorio
echo :: e converter os arquvos smiles (xxx.smi) encontrados
echo :: em arquivos fingerprint (xxx.fpt) usando babel
echo ::
echo :: Forma de uso: getsmiles nome_do_diretorio
echo ::
echo :: a saida do comando (arquivos fpt) sera armazenada
echo :: em nome_do_diretorio.
echo ::
echo :: ATENCAO: Se o nome do diretorio tiver espacos use aspas
echo :: Exemplo: getsmiles "nome do diretorio". Se nenhum diretorio
echo :: for especificado o diretorio anterior sera utilizado.
echo ::
goto :EOF

arquivo: getsmiles-new.bat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

:: getsmiles.bat
:: Autor: Jorge Pina
:: data: 01/08/2011
:: versao 1.2 - 25/02/2014
::
:: batch para ler conteudo de um diretorio
:: e converter os arquvos smiles (xxx.smi) encontrados
:: em arquivos fingerprint (xxx.fpt) usando babel
::
:: Forma de uso: getsmiles nome_do_diretorio
::
:: a saida do comando (arquivos fpt) sera armazenada
:: em nome_do_diretorio.
::
:: ATENCAO: Se o nome do diretorio tiver espacos use aspas
:: Exemplo: getsmiles "nome do diretorio". Se nenhum diretorio
:: for especificado o diretorio atual sera utilizado.
::
@echo off
if [%1] == [--help] goto HELP
set CURDIR=%cd%
cd %1
set SDIR="%cd%"
cd %CURDIR%
echo ::
echo :: getsmiles.bat - Autor: Jorge Pina - versao 1.2 - 25/02/2014
echo :: Utilize getsmiles.bat --help para obter ajuda.
if [%SDIR%] == [] goto :ALERTA
:BABEL
set | find /i /c "babel" > null 2>&1
if errorlevel 1 goto GETBABEL
goto BUSCA
:GETBABEL
echo ::
echo :: O programa "babel" parece nao estar instalado
echo ::
goto :EOF
:BUSCA
echo ::
echo :: Pesquisando em %SDIR%
dir %SDIR%\*.smi > null 2>&1
if errorlevel 1 goto :SMI
if exist @smi del /f @smi
if exist @list del /f @list
set LIST=%SDIR%\*.smi
dir /b %LIST% > @list
For /f "tokens=* delims= " %%a in (@list) do @echo %%~na >> @smi
For /f %%b in (@smi) do babel %SDIR%\%%b.smi -ofpt -xs > %SDIR%\%%b.fpt
del /f @list
del /f @smi
goto :EOF
:HELP
echo ::
echo :: Autor: Jorge Pina

65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97

echo :: data: 01/08/2011


echo :: versao 1.2 - 25/02/2014
echo ::
echo :: batch para ler conteudo de um diretorio
echo :: e converter os arquvos smiles (xxx.smi) encontrados
echo :: em arquivos fingerprint (xxx.fpt) usando babel
echo ::
echo :: Forma de uso: getsmiles nome_do_diretorio
echo ::
echo :: a saida do comando (arquivos fpt) sera armazenada
echo :: em nome_do_diretorio.
echo ::
echo :: ATENCAO: Se o nome do diretorio tiver espacos use aspas
echo :: Exemplo: getsmiles "nome do diretorio". Se nenhum diretorio
echo :: for especificado o diretorio atual sera utilizado.
echo ::
goto :EOF
:ALERTA
set SDIR="%cd%"
echo ::
echo :: ATENCAO: nenhum diretorio foi especificado.
echo :: O diretorio atual sera utilizado.
echo ::
goto :BABEL
:SMI
echo ::
echo :: ATENCAO: nenhum arquivo "smi" foi encontrado neste diretorio.
echo :: Utilize getsmiles.bat --help para obter ajuda.
echo ::
goto :EOF

Aplicando o comando diff getsmiles-old.bat getsmiles-new.bat obteremos o resultado indicado a


seguir. Procure analisar as informaes retornadas pelo comando.
arquivo: getsmiles.diff
4c4
< :: versao 1.1 - 02/08/2011
--> :: versao 1.2 - 25/02/2014
7,8c7,8
< :: e converter os arquivos smi do diretorio
< :: em arquivo fingerprint usando babel
--> :: e converter os arquvos smiles (xxx.smi) encontrados
> :: em arquivos fingerprint (xxx.fpt) usando babel
10c10
< :: uso: getsmiles nome_do_diretorio
--> :: Forma de uso: getsmiles nome_do_diretorio
16c16,17
< :: Exemplo: getsmiles "nome do arquivo"
--> :: Exemplo: getsmiles "nome do diretorio". Se nenhum diretorio
> :: for especificado o diretorio atual sera utilizado.
28c29
< echo :: getsmiles.bat - Autor: Jorge Pina - versao 1.1 - 02/08/2011
--> echo :: getsmiles.bat - Autor: Jorge Pina - versao 1.2 - 25/02/2014

30a32,50
> if [%SDIR%] == [] goto :ALERTA
>
> :BABEL
> set | find /i /c "babel" > null 2>&1
> if errorlevel 1 goto GETBABEL
> goto BUSCA
>
> :GETBABEL
> echo ::
> echo :: O programa "babel" parece nao estar instalado
> echo ::
> goto :EOF
>
> :BUSCA
> echo ::
> echo :: Pesquisando em %SDIR%
> dir %SDIR%\*.smi > null 2>&1
> if errorlevel 1 goto :SMI
>
39a60
> goto :EOF
58c79,94
< echo :: for especificado o diretorio anterior sera utilizado.
--> echo :: for especificado o diretorio atual sera utilizado.
> echo ::
> goto :EOF
>
> :ALERTA
> set SDIR="%cd%"
> echo ::
> echo :: ATENCAO: nenhum diretorio foi especificado.
> echo :: O diretorio atual sera utilizado.
> echo ::
> goto :BABEL
>
> :SMI
> echo ::
> echo :: ATENCAO: nenhum arquivo "smi" foi encontrado neste diretorio.
> echo :: Utilize getsmiles.bat --help para obter ajuda.

Paralelamente ao comando diff existe o comando patch. O primeiro gera as diferenas e o


segundo permite atualizar um arquivo antigo, com as diferenas da nova verso. Ou seja, faz o
processo inverso seguindo a lgica:
diff = atual original
atual = patch + original
Para ajustar melhor a integrao entre estes programas, novos parmetros foram acrescentados
em novas verses do comando diff. O parmetro -u o mais aceito atualmente para gerar
diferenas para serem utilizadas pelo patch. Este u vem de modo unificado (unified), uma
aluso ao fato de se reunir os formatos de sada que foram propostos desde a criao do comando
diff em 1990. Este modo unificado uma evoluo do modo de contexto -c. A sada do diff
originalmente era constituda por linhas indicando as alteraes. As linhas de contexto vieram no
sentido de d uma maior consistncia informao, exibindo linhas de texto adjacentes a linha

que sofreu mudana. O modo unificado sistematizou este conceito condensando este nmero de
linhas evitando repeties, alm de outras formataes.

O formato de sada unificado


Nos exemplos que seguem iro ser feitas novas comparaes com os arquivos enzima-old.txt e
enzimas-new.txt usando o formato unificado.
diferenas (enzima-u.diff)
--- enzima-old.txt
Wed Mar 05 08:58:54 2014
+++ enzima-new.txt Fri
Feb 28 22:01:02 2014
@@ -1,7 +1,11 @@
Classificao das Enzimas
+As enzimas podem ser classificadas de acordo com vrios critrios. O
+criterio mais importante foi o estabelecido pela Unio Internacional
+de Bioqumica (IUB), e estabelece 6 classes:
+
Hidrolases So aquelas enzimas que se associam a molculas de
gua para promoverem a quebra das ligaes covalentes.
-Exemplo:
+Exemplo: Peptidases.
Ligases So responsveis por formar novas molculas atravs da
unio de duas j pr-existentes.
@@ -9,7 +13,7 @@
Oxidoredutases So responsveis por efetuar a transferncia de
eltrons, ou seja, relizam oxi-reduo.
-Exemplo: Desidrhogenases.
+Exemplo: Desidrogenases.
Transferases So aquelas enzimas que tem como finalidade realizar
a translocao de grupos funcionais tais como amina, carbonila,
@@ -17,11 +21,11 @@
Exemplo: Quinase.
Liases Atuam na remoo de gua, gs carbnico e amnia, a partir
-da ruptura de ligaes covalintes.
-Pepsina.
+da ruptura de ligaes covalentes.
Exemplo: Descarboxilase.
Isomerases Responsveis por mediar a converso de substncias
isomricas, sejam eles geomtricos ou pticos.
Exemplo: Epimerases.
-Enzima + Cofator, chamamos de holoenzima
+
+Fonte:http://www.estudopratico.com.br/enzimas-funcoes-e-classificacao/

Podemos observar que as informaes fornecidas pelo comando diff e diff u, apesar de
relatarem diferenas entre dois arquivos, tm uma formatao bem diferente. Compare as tabelas
enzima.diff e enzima-u.diff anteriores. Passemos a analisar este ltimo resultado.
Nas primeiras duas linhas o comando informa quais arquivos ele est comparando. O smbolo ---
colocado na frente do nome do primeiro arquivo passado ao comando, normalmente o mais
antigo. J o smbolo +++ colocado na frente do nome do segundo arquivo, o mais novo. A data
e hora de criao do arquivo e a zona de tempo tambm so informados.
--- enzima-old.txt
+++ enzima-new.txt

Wed Mar 05 08:58:54 2014


Fri Feb 28 22:01:02 2014

O resto da sada do comando diff u constitudo por trechos (hunks). Cada trecho comea com
uma linha de cdigo indicando a abrangncia do mesmo, seguida de linhas que sero apagadas ou
acrescentadas, e um nmero de linhas contextuais em torno destas linhas. Por padro at trs
linhas contextuais, quando possvel, so informadas pelo comando. As Linhas a serem
acrescentadas possuem um smbolo + em seu incio enquanto que aquelas a serem apagadas
comeam por um smbolo -. As linhas contextuais utilizadas so informadas com um espao
inicial. A linha de cdigo de cada trecho comea e termina com um duplo arroba @@. Entre
estes smbolos uma informao sobre o intervalo de abrangncia na forma N,M apresentada.
Um smbolo - acrescido se o intervalo se refere ao arquivo original ou um smbolo + se se
refere ao arquivo atual. O nmero N indica a linha onde comea o trecho e o nmero M por
quantas linhas o trecho se propaga. Se o nmero M omitido seu valor 1. Somando-se todas as
linhas apagadas (e as modificadas) com as linhas de contexto de um trecho do arquivo original,
este total dever ser igual a N. Somando-se todas as linhas acrescentadas (e as modificadas) com
as linhas de contexto de um trecho do arquivo atual, este total dever ser igual a M.
Analisando o primeiro trecho indicado pelo comando no caso em questo, @ @ - 1 , 7 + 1 , 1 1 @ @ ,
vemos que ele comea na primeira linha do arquivo original, se estendendo por 7 linhas. E na
primeira linha do arquivo atual, se estendendo por 11 linhas.

N=7

@@ -1,7 +1,11 @@
Classificao das Enzimas
+As enzimas podem ser classificadas de acordo com vrios critrios. O
+criterio mais importante foi o estabelecido pela Unio Internacional
+de Bioqumica (IUB), e estabelece 6 classes:
+
Hidrolases So aquelas enzimas que se associam a molculas de
gua para promoverem a quebra das ligaes covalentes.
-Exemplo:
+Exemplo: Peptidases.

M=11

Ligases So responsveis por formar novas molculas atravs da


unio de duas j pr-existentes.

Conforme a anlise do trecho anterior, o segundo trecho comea na linha 9 do arquivo original, se
estendendo por 7 linhas. E na linha 13 do arquivo atual, se estendendo tambm por 7 linhas.
Lembremos que o trecho anterior terminou na linha 7 do arquivo original e este novo trecho
comea na linha 9. Aparentemente a linha 8 no foi includa. Isto no funciona assim. Por padro,
todas as linhas comuns a ambos os arquivos so omitidas no resultado da comparao,
excetuando-se as linhas de contexto. O comando diff procura por possveis linhas a serem
modificadas. Quando encontra, o mesmo especifica a linha e reporta trs linhas de contexto em
torno da linha. Assim, depois da linha 7 no arquivo original, a prxima linha a sofrer alterao a
linha 12, diminuindo 3 temos ento que o trecho comea na linha 9. Isto uma maneira de
diminuir as informaes passadas pelo diff. O mesmo vale para as demais alteraes do trecho.
Se as linhas de contexto referentes a um trecho se sobrepem as de outro trecho adjacente o
comando ir agrupar os trechos em um nico trecho.
@@ -9,7 +13,7 @@
Oxidoredutases So responsveis por efetuar a transferncia de
eltrons, ou seja, relizam oxi-reduo.
-Exemplo: Desidrhogenases.
+Exemplo: Desidrogenases.
Transferases So aquelas enzimas que tem como finalidade realizar
a translocao de grupos funcionais tais como amina, carbonila,

Anlises parecidas aos dois trechos anteriores podem ser feitas para o ltimo trecho que comea
na linha 17 do arquivo original, se estendendo por 11 linhas. E na linha 21 do arquivo atual, se
estendendo tambm por 11 linhas.
@@ -17,11 +21,11 @@
Exemplo: Quinase.
Liases Atuam na remoo de gua, gs carbnico e amnia, a partir
-da ruptura de ligaes covalintes.
-Pepsina.
+da ruptura de ligaes covalentes.
Exemplo: Descarboxilase.
Isomerases Responsveis por mediar a converso de substncias
isomricas, sejam eles geomtricos ou pticos.
Exemplo: Epimerases.
-Enzima + Cofator, chamamos de holoenzima
+
+Fonte:http://www.estudopratico.com.br/enzimas-funcoes-e-classificacao/

Comparando diretrios
Outra possibilidade fantstica do comando diff a possibilidade de comparao de diretrios
inteiros utilizando o comando na forma diff u old new. No caso "old e new representam
diretrios cujos contedos se desejam comparar, e o -u foi utilizado apenas para uma sada no
formato unificado. O parmetro -r pode ser utilizado neste caso para estender as comparaes
aos subdiretrios dos diretrios de comparao. Outro parmetro que pode ser muito til neste
tipo de cenrio o -N, que significa que se um arquivo aparecer em apenas um dos diretrios
sendo comparados, o comando deve assumir que o mesmo arquivo exista no outro diretrio s
que sendo um arquivo vazio. Para testarmos estas funcionalidades crie dois diretrios os quais
chamaremos de old e new, e nestes diretrios os subdiretrios A e B respectivamente. Neste
tipo de comparao, os arquivos a serem comparados devem possuir o mesmo nome, ainda que
diferentes em seu contedo. Para evitar equvocos proceda do seguinte modo. No diretrio old
copie o arquivo enzima-old.txt e no subdiretrio A copie o arquivo getsmiles-old.bat. No
diretrio new copie o arquivo enzima-new.txt e no subdiretrio B copie o arquivo
getsmiles-new.bat. Crie tambm os arquivos JGet.java e pyenv.bat e os salve nos diretrios
old e new respectivamente. O programa JGet um utilitrio disponibilizado pelo site
www.pdb.org e se destina a baixar arquivos PDB diretamente deste site. O seu nome uma
aluso ao wget comumente utilizado em plataformas Linux para baixar arquivos. Existe verso
para Windows portadas pelo projeto GNUWin32. O segundo programa, o pyenv.bat, um script
simples para manter funcional vrias verses de Python em plataforma Windows. O script prepara
as variveis de ambiente necessrias verso requerida por uma aplicao. comum que
aplicativos que se apoiem em programao Python (biopyhon, pymol, ADTool entre outros)
requeiram verses especficas para funcionar. No caso voc no precisa instalar verses
sobrepostas. Simplesmente baixe o arquivo compactado referente a verso que voc necessita,
descompacte-a num diretrio e siga as instrues no script pyenv.bat. A seguir o contedo dos
scripts para voc copiar.

arquivo: JGet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

/*
* A simple Java class to provide functionality similar to Wget.
*
* Source: http://www.pdb.org/
*/
import java.io.*;
import java.net.*;
public class JGet {
public static void main(String[] args) {
if ( (args.length != 1) ) {
System.err.println( "\nUsage: java JGet [PDBToGet Without extension]" );
System.exit(1);
}
String url = "http://www.pdb.org/pdb/download/downloadFile.do?" +
"fileFormat=pdb&compression=NO&structureId=" + args[0];
URL u;
InputStream is = null;
FileOutputStream fos = null;
BufferedReader fin = null;
BufferedWriter fout = null;
String s;
try {
u = new URL(url);
is = u.openStream();
fin = new BufferedReader(new InputStreamReader(is));
fos = new FileOutputStream(args[0] + ".pdb");
fout = new BufferedWriter(new OutputStreamWriter(fos));
System.out.println("Downloading \"" + args[0] + ".pdb" + "\" from PDB Database ..." );
while ((s = fin.readLine()) != null) {
fout.write(s);
fout.newLine();
}
System.out.println("Download succesfully completed!");
}
catch (MalformedURLException mue) {
System.err.println("Ouch - a MalformedURLException happened.");
mue.printStackTrace();
System.exit(2);
}
catch (IOException ioe) {
System.err.println("The file \"" + args[0] + ".pdb \" does not exist in PDB Database");
System.exit(3);
}
finally {
try {
is.close();
fout.close();
}
catch (IOException ioe) { }
}
}

arquivo: pyenv.bat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

@echo off
if [%1] == [252] goto PYTHON252
if [%1] == [25] goto PYTHON25
if [%1] == [26] goto PYTHON26
if [%1] == [27] goto PYTHON27
if [%1] == [32] goto PYTHON32
echo::
echo :: Especifique uma versao de Python para gerar o ambiente.
echo :: Forma de uso: pyenv.bat versao
echo ::
echo :: Exemplo. Se a versao necessaria eh a 2.7 utilize pyenv.bat 27
echo :: Versoes disponiveis: 2.52, 2.5, 2.6, 2.7 e 3.2
echo :: Caso a versao desejada nao esteja disponivel, baixa a versao
echo :: e a descompacte no diretorio C:\PythonXX e edite este arquivo
echo :: seguindo o modelo das outras versoes.
echo ::
goto :EOF
:PYTHON252
set prompt=$p(Py 2.5.2)$g
set PATH=C:\Python2.5.2\;C:\Python2.5.2\Scripts;%PATH%
set PATHEXT=.PY;.PYW;%PATHEXT%
goto :EOF
:PYTHON25
set prompt=$p(Py 2.5.4)$g
set PATH=C:\Python25\;C:\Python25\Scripts;%PATH%
set PATHEXT=.PY;.PYW;%PATHEXT%
goto :EOF
:PYTHON26
set prompt=$p(Py 2.6)$g
set PATH=C:\Python26\;C:\Python26\Scripts;%PATH%
set PATHEXT=.PY;.PYW;%PATHEXT%
goto :EOF
:PYTHON27
set prompt=$p(Py 2.7)$g
set PATH=C:\Python27\;C:\Python27\Scripts;%PATH%
set PATHEXT=.PY;.PYW;%PATHEXT%
goto :EOF
:PYTHON32
set prompt=$p(Py 3.2)$g
set PATH=C:\Python32\;C:\Python32\Scripts;%PATH%
set PATHEXT=.PY;.PYW;%PATHEXT%
goto :EOF

Como foi dito anteriormente, os arquivos a serem comparados devem ter o mesmo nome. Deste
modo renomeie os arquivos que foram copiados de modo que se tenha a estrutura da figura que
segue. Ou seja, as palavras old e new foram retiradas no nome dos arquivos

Podemos agora testar a potencialidade do comando diff na comparao de diretrios. Para isto
abra um terminal no diretrio que contenha os diretrios old e new e execute o comando
diff Nur old new > dircomp.diff. Abaixo podemos ver o resultado da comparao. Temos agora
um longo arquivo de diferenas envolvendo a comparao de arquivos homnimos nos dois
diretrios de comparao. Os arquivos que s existam em um dois diretrios so comparados a
um homnimo vazio criado pelo comando diff.
diferenas (dircomp.diff)
diff -Nur old/A/getsmiles.bat new/A/getsmiles.bat
--- old/A/getsmiles.bat
Wed Mar 05 21:32:34 2014
+++ new/A/getsmiles.bat
Wed Mar 05 23:07:02 2014
@@ -1,19 +1,20 @@
:: getsmiles.bat
:: Autor: Jorge Pina
:: data: 01/08/2011
-:: versao 1.1 - 02/08/2011
+:: versao 1.2 - 25/02/2014
::
:: batch para ler conteudo de um diretorio
-:: e converter os arquivos smi do diretorio
-:: em arquivo fingerprint usando babel
+:: e converter os arquvos smiles (xxx.smi) encontrados
+:: em arquivos fingerprint (xxx.fpt) usando babel
::
-:: uso: getsmiles nome_do_diretorio
+:: Forma de uso: getsmiles nome_do_diretorio
::
:: a saida do comando (arquivos fpt) sera armazenada
:: em nome_do_diretorio.
::
:: ATENCAO: Se o nome do diretorio tiver espacos use aspas
-:: Exemplo: getsmiles "nome do arquivo"
+:: Exemplo: getsmiles "nome do diretorio". Se nenhum diretorio
+:: for especificado o diretorio atual sera utilizado.
::
@echo off
@@ -25,9 +26,28 @@
cd %CURDIR%
echo ::
-echo :: getsmiles.bat - Autor: Jorge Pina - versao 1.1 - 02/08/2011
+echo :: getsmiles.bat - Autor: Jorge Pina - versao 1.2 - 25/02/2014
echo :: Utilize getsmiles.bat --help para obter ajuda.
+if [%SDIR%] == [] goto :ALERTA
+
+:BABEL
+set | find /i /c "babel" > null 2>&1
+if errorlevel 1 goto GETBABEL
+goto BUSCA
+
+:GETBABEL
+echo ::
+echo :: O programa "babel" parece nao estar instalado
+echo ::
+goto :EOF
+
+:BUSCA
+echo ::
+echo :: Pesquisando em %SDIR%
+dir %SDIR%\*.smi > null 2>&1
+if errorlevel 1 goto :SMI

+
if exist @smi del /f @smi
if exist @list del /f @list
@@ -37,6 +57,7 @@
For /f %%b in (@smi) do babel %SDIR%\%%b.smi -ofpt -xs > %SDIR%\%%b.fpt
del /f @list
del /f @smi
+goto :EOF
:HELP
echo ::
@@ -55,6 +76,21 @@
echo ::
echo :: ATENCAO: Se o nome do diretorio tiver espacos use aspas
echo :: Exemplo: getsmiles "nome do diretorio". Se nenhum diretorio
-echo :: for especificado o diretorio anterior sera utilizado.
+echo :: for especificado o diretorio atual sera utilizado.
+echo ::
+goto :EOF
+
+:ALERTA
+set SDIR="%cd%"
+echo ::
+echo :: ATENCAO: nenhum diretorio foi especificado.
+echo :: O diretorio atual sera utilizado.
+echo ::
+goto :BABEL
+
+:SMI
+echo ::
+echo :: ATENCAO: nenhum arquivo "smi" foi encontrado neste diretorio.
+echo :: Utilize getsmiles.bat --help para obter ajuda.
echo ::
goto :EOF
diff -Nur old/enzima.txt new/enzima.txt
--- old/enzima.txt
2014-03-05 08:58:54.790460300 -0300
+++ new/enzima.txt 2014-02-28 22:01:02.372939300 -0300
@@ -1,7 +1,11 @@
Classificao das Enzimas
+As enzimas podem ser classificadas de acordo com vrios critrios. O
+criterio mais importante foi o estabelecido pela Unio Internacional
+de Bioqumica (IUB), e estabelece 6 classes:
+
Hidrolases So aquelas enzimas que se associam a molculas de
gua para promoverem a quebra das ligaes covalentes.
-Exemplo:
+Exemplo: Peptidases.
Ligases So responsveis por formar novas molculas atravs da
unio de duas j pr-existentes.
@@ -9,7 +13,7 @@
Oxidoredutases So responsveis por efetuar a transferncia de
eltrons, ou seja, relizam oxi-reduo.
-Exemplo: Desidrhogenases.
+Exemplo: Desidrogenases.
Transferases So aquelas enzimas que tem como finalidade realizar
a translocao de grupos funcionais tais como amina, carbonila,
@@ -17,11 +21,11 @@
Exemplo: Quinase.
Liases Atuam na remoo de gua, gs carbnico e amnia, a partir
-da ruptura de ligaes covalintes.
-Pepsina.

+da ruptura de ligaes covalentes.


Exemplo: Descarboxilase.
Isomerases Responsveis por mediar a converso de substncias
isomricas, sejam eles geomtricos ou pticos.
Exemplo: Epimerases.
-Enzima + Cofator, chamamos de holoenzima
+
+Fonte:http://www.estudopratico.com.br/enzimas-funcoes-e-classificacao/
diff -Nur old/JGet.java new/JGet.java
--- old/JGet.java
2014-03-01 10:26:02.069901900 -0300
+++ new/JGet.java 1969-12-31 22:00:00.000000000 -0200
@@ -1,60 +0,0 @@
-/*
- * A simple Java class to provide functionality similar to Wget.
- *
- * Source: http://www.pdb.org/
- */
-import java.io.*;
-import java.net.*;
-public class JGet {
- public static void main(String[] args) {
- if ( (args.length != 1) ) {
System.err.println( "\nUsage: java JGet [PDBToGet Without extension]" );
System.exit(1);
- }
- String url = "http://www.pdb.org/pdb/download/downloadFile.do?" +
"fileFormat=pdb&compression=NO&structureId=" + args[0];
- URL u;
- InputStream is = null;
- FileOutputStream fos = null;
- BufferedReader fin = null;
- BufferedWriter fout = null;
- String s;
- try {
u = new URL(url);
is = u.openStream();
fin = new BufferedReader(new InputStreamReader(is));
fos = new FileOutputStream(args[0] + ".pdb");
fout = new BufferedWriter(new OutputStreamWriter(fos));
System.out.println("Downloading \"" + args[0] + ".pdb" + "\" from PDB Database ..." );
while ((s = fin.readLine()) != null) {
fout.write(s);
fout.newLine();
}
System.out.println("Download succesfully completed!");
- }
- catch (MalformedURLException mue) {
System.err.println("Ouch - a MalformedURLException happened.");
mue.printStackTrace();
System.exit(2);
- }
- catch (IOException ioe) {
System.err.println("The file \"" + args[0] + ".pdb \" does not exist in PDB Database");
System.exit(3);
- }
- finally {
try {
is.close();

fout.close();
}
catch (IOException ioe) { }
- }
- }
-}
diff -Nur old/pyenv.bat new/pyenv.bat
--- old/pyenv.bat
1969-12-31 22:00:00.000000000 -0200
+++ new/pyenv.bat 2014-03-01 11:32:22.823587900 -0300
@@ -0,0 +1,48 @@
+@echo off
+if [%1] == [252] goto PYTHON252
+if [%1] == [25] goto PYTHON25
+if [%1] == [26] goto PYTHON26
+if [%1] == [27] goto PYTHON27
+if [%1] == [32] goto PYTHON32
+
+echo::
+echo :: Especifique uma versao de Python para gerar o ambiente.
+echo :: Forma de uso: pyenv.bat versao
+echo ::
+echo :: Exemplo. Se a versao necessaria eh a 2.7 utilize pyenv.bat 27
+echo :: Versoes disponiveis: 2.52, 2.5, 2.6, 2.7 e 3.2
+echo :: Caso a versao desejada nao esteja disponivel, baixa a versao
+echo :: e a descompacte no diretorio C:\PythonXX e edite este arquivo
+echo :: seguindo o modelo das outras versoes.
+echo ::
+goto :EOF
+
+:PYTHON252
+set prompt=$p(Py 2.5.2)$g
+set PATH=C:\Python2.5.2\;C:\Python2.5.2\Scripts;%PATH%
+set PATHEXT=.PY;.PYW;%PATHEXT%
+goto :EOF
+
+:PYTHON25
+set prompt=$p(Py 2.5.4)$g
+set PATH=C:\Python25\;C:\Python25\Scripts;%PATH%
+set PATHEXT=.PY;.PYW;%PATHEXT%
+goto :EOF
+
+:PYTHON26
+set prompt=$p(Py 2.6)$g
+set PATH=C:\Python26\;C:\Python26\Scripts;%PATH%
+set PATHEXT=.PY;.PYW;%PATHEXT%
+goto :EOF
+
+:PYTHON27
+set prompt=$p(Py 2.7)$g
+set PATH=C:\Python27\;C:\Python27\Scripts;%PATH%
+set PATHEXT=.PY;.PYW;%PATHEXT%
+goto :EOF
+
+:PYTHON32
+set prompt=$p(Py 3.2)$g
+set PATH=C:\Python32\;C:\Python32\Scripts;%PATH%
+set PATHEXT=.PY;.PYW;%PATHEXT%
+goto :EOF

Observamos na tabela acima, que o resultado da comparao de diretrios envolveu, de fato, a


comparao de todos os homnimos, inclusive com a criao de arquivos vazios para comparao
quando os mesmos no existiam nos dois diretrios. Um a um os arquivos so comparados e o

resultado de todas as comparaes fornecido de uma nica vez na sada do comando. Neste
tipo de comparao o comando diff inclui linhas indicando que as informaes que seguem so
referentes a determinados arquivos. Isto feito para cada dupla de arquivos comparados.
diff -Nur old/A/getsmiles.bat new/A/getsmiles.bat
--- old/A/getsmiles.bat
2014-03-05 10:38:38.052787000 -0300
+++ new/A/getsmiles.bat
2014-03-05 19:47:37.488086000 -0300

diff -Nur old/enzima.txt new/enzima.txt


--- old/enzima.txt
2014-03-05 08:58:54.790460300 -0300
+++ new/enzima.txt 2014-02-28 22:01:02.372939300 -0300

diff -Nur old/JGet.java new/JGet.java


--- old/JGet.java
2014-03-01 10:26:02.069901900 -0300
+++ new/JGet.java 1969-12-31 22:00:00.000000000 -0200

diff -Nur old/pyenv.bat new/pyenv.bat


--- old/pyenv.bat
1969-12-31 22:00:00.000000000 -0200
+++ new/pyenv.bat 2014-03-01 11:32:22.823587900 -0300

O resto da informao fornecida pelo comando j foi explicado no texto anterior e o mesmo que
se obteria caso as comparaes fossem feitas manualmente par a par. No prximo captulo ser
visto como o comando patch utiliza um arquivo de diferenas diff para atualizar um arquivo
antigo e deixa-lo atualizado.
Para maiores informaes sobre o comando diff consulte:
http://en.wikipedia.org/wiki/Diff
http://linux.about.com/library/cmd/blcmdl1_diff.htm
http://www.gnu.org/software/diffutils/manual/html_node/
http://publib.boulder.ibm.com/infocenter/aix/v7r1/index.jsp?topic=/com.ibm.aix.cmds/doc/aixc
mds2/diff.htm
http://www.rekk.de/bloggy/diff-command-overview/

Potrebbero piacerti anche