Re: [assunto paralelo] imprimir linhas que contenham valores repetidos

2008-07-07 Por tôpico Junior Polegato - Linux

Gunther Furtado escreveu:

Em Sat, 5 Jul 2008 00:48:03 -0300 (BRT)
[EMAIL PROTECTED] escreveu:
  

[...]

Indo um pouco mais além, pode-se ainda criar um while read linha
para pegar cada linha, decompor esta em colunas, pegar uma coluna e
comparar com as demais, podendo a primeira coluna ser ignorada (uma
linha só):

cat arquivo.txt | while read linha; do coluna=($linha);
[EMAIL PROTECTED]; for ((i=1; icolunas-1; i++)); do for ((j=i+1;
jcolunas; j++)); do if ((coluna[i]==coluna[j])); then echo $linha;
i=colunas; break; fi; done; done; don

[...]

Já ao substituir números por letras e removendo o nome de cada linha,
temos o seguinte:

$ cat teste.txt | while read linha; do coluna=($linha);
[EMAIL PROTECTED]; for ((i=1; icolunas-1; i++)); do for ((j=i+1;
jcolunas; j++)); do if ((coluna[i]==coluna[j])); then echo $linha;
i=colunas; break; fi; done; done; done
C   C   D   E
B   C   D   E
D   D   E   F
D   E   F   G

  


Aqui, quando faço i=1 já estou ignorando a primeira coluna, portanto, ou 
deixa os nomes das colunas ou faça i=0 para começar a comparação a 
partir da primeira coluna. ;-)



Porém aqui tem uma ressalva devido a caracteres reservados do
bash que podem estar na linha, o que pode/vai causar erros. Isso
também poderia ser feito usando a comparação por expr:

cat arquivo.txt | while read linha; do echo -n $linha = ; for
coluna in $linha; do if expr $linha :
.*\$coluna\.*\$coluna\.*  /dev/null; then echo -n $coluna =
$linha; break; fi; done; echo; done


Este funcionou perfeitamente se houver somente uma repetição por linha!
em um arquivo como este aí embaixo
[...]
Este funcionou pelo fato de aqui com expr não estou ignorando a primeira 
coluna na comparação. Mas ainda acho mais lógico controlável o método 
anterior, opinião minha...



Se ainda assim tiver problemas, relate melhor os problemas que
proporemos uma ajuda para encontrar a melhor solução.


Trata-se de uma coleção de aproximadamente 700 imagens separadas em 47
sub-conjuntos. Serão, em sua maioria, itens catalogados como K 1314 ou
F 2241 e é preciso determinar: i) se algum destes itens se repete
dentro de um dos sub-conjuntos; e ii) se se algum destes itens se
repete fora de um dos sub-conjuntos, preciso saber em quais destes
sub-conjuntos isto ocorre.
  


Desculpe, mas não entendi muito bem... As colunas são compostas por 1 
(uma) letra, 1 (um) espaço e 4 (quatro) dígtos, respeita sempre este 
padrão? Cada subconjunto é uma linha no arquivo? Se sim, a primeira 
linha é o nome de cada subconjunto? Se cada linha for um subconjunto, 
o (i) fica fácil pelo que já raciocinamos, mas o (ii) me parece um tanto 
estranho o enunciado, seria pegar todos os itens e ver em quais 
subconjuntos eles aparecem? Ou somente em quais subconjuntos este 
determinado item aparece mais de uma vez?


[]'s
 Junior Polegato



Re: [assunto paralelo] imprimir linhas que contenham valores repetidos

2008-07-07 Por tôpico Junior Polegato - Linux
Fazia tempo que eu não esquecia de tirar o pedido de confirmação para 
leitura, essa última passou. Desculpe-me a falha (estou parecendo a 
Telefônica - rsrsrs).



[]'s

  Junior Polegato


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: [assunto paralelo] imprimir linhas que contenham valores repetidos

2008-07-07 Por tôpico Gunther Furtado
2008/7/7 Junior Polegato - Linux [EMAIL PROTECTED]:
[...]

 Desculpe, mas não entendi muito bem... As colunas são compostas por 1 (uma)
 letra, 1 (um) espaço e 4 (quatro) dígtos, respeita sempre este padrão?

Cada entrada é composta por uma letra e quatro dígitos, o espaço é deprezável.

 Cada
 subconjunto é uma linha no arquivo? Se sim, a primeira linha é o nome de
 cada subconjunto? Se cada linha for um subconjunto, o (i) fica fácil pelo
 que já raciocinamos, mas o (ii) me parece um tanto estranho o enunciado,
 seria pegar todos os itens e ver em quais subconjuntos eles aparecem? Ou
 somente em quais subconjuntos este determinado item aparece mais de uma vez?

As colunas são capítulos de um livro nos quais figurarão imagens
representadas pelos códigos de uma letra e quatro dígitos e o que
preciso é conferir se a mesma imagem aparece em dois ou mais
capítulos. Pensando bem, eu formulei a questão erradamente desde o
princípio. Vou abrir um novo assunto para facilitar as buscas das
gerações futuras!


 []'s
   Junior Polegato




Abraço,


-- 
Gunther Furtado
[EMAIL PROTECTED]


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: [assunto paralelo] imprimir linhas que contenham valores repetidos

2008-07-06 Por tôpico Jarbas Peixoto Júnior
Teste ai!

[EMAIL PROTECTED]:~/tmp$ cat teste.txt
A   3   3   4   5
B   2   3   4   5
C   4   4   5   6
D   4   5   6   7
[EMAIL PROTECTED]:~/tmp$ grep -E ([[:cntrl:]][[:digit:]])\1 teste.txt
A   3   3   4   5
C   4   4   5   6

Att,
Jarbas

2008/7/4 Gunther Furtado [EMAIL PROTECTED]:
 Olá,

 O tópico recente que tratava do awk me deixou curioso para saber se
 ele resolverá um problema para mim, com a ajuda de vocês, é claro:

 A   3   3   4   5
 B2   3   4   5
 C   4   4   5   6
 D   4   5   6   7

 Dado um arquivo entradas que contenha a informação acima, eu
 gostaria de imprimira as linha que contenham qualquer valor repetido,
 nem só o 3, nem só o 4. O resultado que espero é:

 $ awk '/alguma mágica/ { print $0 }' entradas
 A   3   3   4   5
 C   4   4   5   6

 ao invés de:

 $ awk '/3.*3/ { print $0 }' entradas
 A   3   3   4   5

 $ awk '/4.*4/ { print $0 }' entradas
 C   4   4   5   6

 O arquivo real é um pouco maior (47x15), com uns 700 valores
 diferentes e preciso de uma maneira rápida de descobrir se há valores
 que se repetem em qualquer de suas linhas.

 Gracias,

 --
 Gunther Furtado
 [EMAIL PROTECTED]


 --
 To UNSUBSCRIBE, email to [EMAIL PROTECTED]
 with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]




--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: [assunto paralelo] imprimir linhas que contenham valores repetidos

2008-07-06 Por tôpico Gunther Furtado
Em Fri, 4 Jul 2008 21:24:37 -0300
Rodrigo Escobar [EMAIL PROTECTED] escreveu:

 Opa.. cheguei agora aqui..
 
 hehehe eh facinho brother..
 vamos la..
 

Com algumas modificações, funcionou para valores numéricos. Lá vai a
versão final:

#!/bin/sh
# [EMAIL PROTECTED], [EMAIL PROTECTED]

arquivo=teste.txt   # NOME DO ARQUIVO
tamanho_final=9 # VALOR MAXIMO DENTRO DO ARQUIVO

for ((tamanho_inicial = 1; tamanho_inicial  $[tamanho_final + 1];
tamanho_inicial++)) do
   cat $arquivo |awk '/'$tamanho_inicial'.*'$tamanho_inicial'/' 
resultado done

cat resultado |sort|uniq

[...]

 Posta ai pra gente se vc tem numeros maiores que 9 que tentaremos
 achar uma outra solucao..

É pior ainda, são códigos alfanuméricos referentes a arquivos com
imagens.

Vou testar outras dicas e aviso quando tiver resultados.

Grato a todos,

--
Gunther Furtado
[EMAIL PROTECTED]


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: [assunto paralelo] imprimir linhas que contenham valores repetidos

2008-07-06 Por tôpico Gunther Furtado
Em Sun, 6 Jul 2008 02:29:10 -0400
Jarbas Peixoto Júnior [EMAIL PROTECTED] escreveu:

 Teste ai!
 
 [EMAIL PROTECTED]:~/tmp$ cat teste.txt
 A   3   3   4   5
 B   2   3   4   5
 C   4   4   5   6
 D   4   5   6   7
 [EMAIL PROTECTED]:~/tmp$ grep -E ([[:cntrl:]][[:digit:]])\1
 teste.txt A   3   3   4   5
 C   4   4   5   6


Bem, não produz qualquer saída...

/tmp$ cat teste_NUM.txt 
A   3   3   4   5
B   2   3   4   5
C   4   4   5   6
D   4   5   6   7
/tmp$ grep -E ([[:cntrl:]][[:digit:]])\1 teste_NUM.txt
/tmp$ 

Gracias,

--
Gunther Furtado
[EMAIL PROTECTED]


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: [assunto paralelo] imprimir linhas que contenham valores repetidos

2008-07-06 Por tôpico Gunther Furtado
Em Sat, 5 Jul 2008 00:48:03 -0300 (BRT)
[EMAIL PROTECTED] escreveu:

[...]

 
 Olá,
 
 Com número até 9 (uma linha só):
 
 $ egrep '(0.*0|1.*1|2.*2|3.*3|4.*4|5.*5|6.*6|7.*7|8.*8|9.*9)'
 arquivo.txt

De fato, funciona perfeitamente, para números de 0 a 9.

 
 Seguindo a mesma idéia, com números maiores até 99, deve-se
 envolver os números até 9 por \n\, por exemplo até 15 (uma linha
 só):
 
 $ egrep
 '(\0\.*\0\|\1\.*\1\|\2\.*\2\|\3\.*\3\|\4\.*\4\|\5\.*\5\|\6\.*\6\|\7\.*\7\|\8\.*\8\|\9\.*\9\|10.*10|11.*11|12.*12|13.*13|14.*14|15.*15)'
 arquivo.txt
 
 Claro que fazer na mão dá trampo, então para gerar a seqüência com
 todos envolvidos, pode-se usar (uma linha só):
 
 for i in `seq 0 n`; do echo -n \$i\.*\$i\|; done; echo
 
 Agora pode-se ainda abstrair e não colocar apenas números, pode
 ser letras também no lugar dos números na expressão regular do egrep.
 
 Indo um pouco mais além, pode-se ainda criar um while read linha
 para pegar cada linha, decompor esta em colunas, pegar uma coluna e
 comparar com as demais, podendo a primeira coluna ser ignorada (uma
 linha só):
 
 cat arquivo.txt | while read linha; do coluna=($linha);
 [EMAIL PROTECTED]; for ((i=1; icolunas-1; i++)); do for ((j=i+1;
 jcolunas; j++)); do if ((coluna[i]==coluna[j])); then echo $linha;
 i=colunas; break; fi; done; done; done
 

Aqui, encontrei o seguinte problema: para um arquivo contendo as linhas
abaixo, funciona perfeitamente.

A   3   3   4   5
B   2   3   4   5
C   4   4   5   6
D   4   5   6   7

Já ao substituir números por letras e removendo o nome de cada linha,
temos o seguinte:

$ cat teste.txt | while read linha; do coluna=($linha);
[EMAIL PROTECTED]; for ((i=1; icolunas-1; i++)); do for ((j=i+1;
jcolunas; j++)); do if ((coluna[i]==coluna[j])); then echo $linha;
i=colunas; break; fi; done; done; done
C   C   D   E
B   C   D   E
D   D   E   F
D   E   F   G


 Porém aqui tem uma ressalva devido a caracteres reservados do
 bash que podem estar na linha, o que pode/vai causar erros. Isso
 também poderia ser feito usando a comparação por expr:
 
 cat arquivo.txt | while read linha; do echo -n $linha = ; for
 coluna in $linha; do if expr $linha :
 .*\$coluna\.*\$coluna\.*  /dev/null; then echo -n $coluna =
 $linha; break; fi; done; echo; done
 

Este funcionou perfeitamente se houver somente uma repetição por linha!
em um arquivo como este aí embaixo

C   C   D   D
B   C   D   E
D   D   E   F
D   E   F   G

a resposta é:

C   C   D   D = C = C   C   D   D
B   C   D   E = 
D   D   E   F = D = D   D   E   F
D   E   F   G = 


 Se ainda assim tiver problemas, relate melhor os problemas que
 proporemos uma ajuda para encontrar a melhor solução.

Trata-se de uma coleção de aproximadamente 700 imagens separadas em 47
sub-conjuntos. Serão, em sua maioria, itens catalogados como K 1314 ou
F 2241 e é preciso determinar: i) se algum destes itens se repete
dentro de um dos sub-conjuntos; e ii) se se algum destes itens se
repete fora de um dos sub-conjuntos, preciso saber em quais destes
sub-conjuntos isto ocorre.

 
 PS: '\...\' é uma boa alternativa quando se trabalha com valores
 separados por caracteres não visíveis.
 
 
 []'s
 Junior Polegato
 

Muito obrigado,

Gunther Furtado


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: [assunto paralelo] imprimir linhas que contenham valores repetidos

2008-07-05 Por tôpico Gunther Furtado
Muito obrigado aos colegas!

Assim que testar, aviso!

Abraço,

--
Gunther Furtado
[EMAIL PROTECTED]


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



[assunto paralelo] imprimir linhas que contenham valores repetidos

2008-07-04 Por tôpico Gunther Furtado
Olá,

O tópico recente que tratava do awk me deixou curioso para saber se
ele resolverá um problema para mim, com a ajuda de vocês, é claro:

A   3   3   4   5
B2   3   4   5
C   4   4   5   6
D   4   5   6   7

Dado um arquivo entradas que contenha a informação acima, eu
gostaria de imprimira as linha que contenham qualquer valor repetido,
nem só o 3, nem só o 4. O resultado que espero é:

$ awk '/alguma mágica/ { print $0 }' entradas
A   3   3   4   5
C   4   4   5   6

ao invés de:

$ awk '/3.*3/ { print $0 }' entradas
A   3   3   4   5

$ awk '/4.*4/ { print $0 }' entradas
C   4   4   5   6

O arquivo real é um pouco maior (47x15), com uns 700 valores
diferentes e preciso de uma maneira rápida de descobrir se há valores
que se repetem em qualquer de suas linhas.

Gracias,

-- 
Gunther Furtado
[EMAIL PROTECTED]


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: [assunto paralelo] imprimir linhas que contenham valores repetidos

2008-07-04 Por tôpico Rodrigo Escobar
Opa.. cheguei agora aqui..

hehehe eh facinho brother..
vamos la..

Depende da faixa de valores que vc tem dentro do arquivo.. mas vou dar
exemplo do que criei aqui..

[EMAIL PROTECTED]:/home/rodrigo]$ cat num
A   3   3   4   5
B   2   3   4   5
C   4   4   5   6
D   4   5   6   4
E   2   3   3   2
F   1   3   2   5
G   9   1   7   9


#!/bin/sh
# [EMAIL PROTECTED]

arquivo=num   # NOME DO ARQUIVO
tamanho_final=9# VALOR MAXIMO DENTRO DO ARQUIVO

for ((tamanho_inicial = 1; tamanho_inicial  $[tamanho_final + 1];
tamanho_inicial++))
 do
  cat num |awk '/'$tamanho_inicial'.*'$tamanho_inicial'/'  resultado
 done

cat resultado |sort|uniq

Que finalmente gera..

[EMAIL PROTECTED]:/home/rodrigo]$ sh s.sh
A   3   3   4   5
C   4   4   5   6
D   4   5   6   4
E   2   3   3   2
G   9   1   7   9

Mas tem um problema aqui.. por exemplo.. se voce tiver valores maiores que
10 já nao vai dar para comparar, porque ele esta comparando caracter por
caracter.. ou seja.. voce teria

X   1   3   5   15

Ele acharia que eh igual porque ele irá procurar caracter a caracter e nao
cadeia de caracteres..
Posta ai pra gente se vc tem numeros maiores que 9 que tentaremos achar uma
outra solucao..

abs!



2008/7/4 Gunther Furtado [EMAIL PROTECTED]:

 Olá,

 O tópico recente que tratava do awk me deixou curioso para saber se
 ele resolverá um problema para mim, com a ajuda de vocês, é claro:

 A   3   3   4   5
 B2   3   4   5
 C   4   4   5   6
 D   4   5   6   7

 Dado um arquivo entradas que contenha a informação acima, eu
 gostaria de imprimira as linha que contenham qualquer valor repetido,
 nem só o 3, nem só o 4. O resultado que espero é:

 $ awk '/alguma mágica/ { print $0 }' entradas
 A   3   3   4   5
 C   4   4   5   6

 ao invés de:

 $ awk '/3.*3/ { print $0 }' entradas
 A   3   3   4   5

 $ awk '/4.*4/ { print $0 }' entradas
 C   4   4   5   6

 O arquivo real é um pouco maior (47x15), com uns 700 valores
 diferentes e preciso de uma maneira rápida de descobrir se há valores
 que se repetem em qualquer de suas linhas.

 Gracias,

 --
 Gunther Furtado
 [EMAIL PROTECTED]


 --
 To UNSUBSCRIBE, email to [EMAIL PROTECTED]
 with a subject of unsubscribe. Trouble? Contact
 [EMAIL PROTECTED]




Re: [assunto paralelo] imprimir linhas que contenham valores repetidos

2008-07-04 Por tôpico linux
 Opa.. cheguei agora aqui..
  hehehe eh facinho brother..
 vamos la..
  Depende da faixa de valores que vc tem dentro do arquivo.. mas vou dar
 exemplo do que criei aqui..
  [EMAIL PROTECTED]:/home/rodrigo]$ cat num
 A   3   3   4   5
 B   2   3   4   5
 C   4   4   5   6
 D   4   5   6   4
 E   2   3   3   2
 F   1   3   2   5
 G   9   1   7   9
 #!/bin/sh
 # [EMAIL PROTECTED]
 arquivo=num   # NOME DO ARQUIVO
 tamanho_final=9# VALOR MAXIMO DENTRO DO ARQUIVO
 for ((tamanho_inicial = 1; tamanho_inicial  $[tamanho_final + 1];
 tamanho_inicial++))
  do
   cat num |awk '/'$tamanho_inicial'.*'$tamanho_inicial'/'  resultado
  done
 cat resultado |sort|uniq
 Que finalmente gera..
 [EMAIL PROTECTED]:/home/rodrigo]$ sh s.sh
 A   3   3   4   5
 C   4   4   5   6
 D   4   5   6   4
 E   2   3   3   2
 G   9   1   7   9
 Mas tem um problema aqui.. por exemplo.. se voce tiver valores maiores que
 10 já nao vai dar para comparar, porque ele esta comparando caracter por
 caracter.. ou seja.. voce teria
 X   1   3   5   15
 Ele acharia que eh igual porque ele irá procurar caracter a caracter e nao
 cadeia de caracteres..
 Posta ai pra gente se vc tem numeros maiores que 9 que tentaremos achar
 uma outra solucao..

Olá,

Com número até 9 (uma linha só):

$ egrep '(0.*0|1.*1|2.*2|3.*3|4.*4|5.*5|6.*6|7.*7|8.*8|9.*9)' arquivo.txt

Seguindo a mesma idéia, com números maiores até 99, deve-se envolver
os números até 9 por \n\, por exemplo até 15 (uma linha só):

$ egrep
'(\0\.*\0\|\1\.*\1\|\2\.*\2\|\3\.*\3\|\4\.*\4\|\5\.*\5\|\6\.*\6\|\7\.*\7\|\8\.*\8\|\9\.*\9\|10.*10|11.*11|12.*12|13.*13|14.*14|15.*15)'
arquivo.txt

Claro que fazer na mão dá trampo, então para gerar a seqüência com
todos envolvidos, pode-se usar (uma linha só):

for i in `seq 0 n`; do echo -n \$i\.*\$i\|; done; echo

Agora pode-se ainda abstrair e não colocar apenas números, pode ser
letras também no lugar dos números na expressão regular do egrep.

Indo um pouco mais além, pode-se ainda criar um while read linha
para pegar cada linha, decompor esta em colunas, pegar uma coluna e
comparar com as demais, podendo a primeira coluna ser ignorada (uma
linha só):

cat arquivo.txt | while read linha; do coluna=($linha);
[EMAIL PROTECTED]; for ((i=1; icolunas-1; i++)); do for ((j=i+1;
jcolunas; j++)); do if ((coluna[i]==coluna[j])); then echo $linha;
i=colunas; break; fi; done; done; done

Porém aqui tem uma ressalva devido a caracteres reservados do bash que
podem estar na linha, o que pode/vai causar erros. Isso também poderia
ser feito usando a comparação por expr:

cat arquivo.txt | while read linha; do echo -n $linha = ; for coluna in
$linha; do if expr $linha : .*\$coluna\.*\$coluna\.*  /dev/null;
then echo -n $coluna = $linha; break; fi; done; echo; done

Se ainda assim tiver problemas, relate melhor os problemas que
proporemos uma ajuda para encontrar a melhor solução.

PS: '\...\' é uma boa alternativa quando se trabalha com valores
separados por caracteres não visíveis.


[]'s
Junior Polegato


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]