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

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



Gunther Furtado escreveu:
Em Sat, 5 Jul 2008 00:48:03 -0300 (BRT)
linux@juniorpolegato.com.br 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);
colunas=${#coluna[@]}; for ((i=1; i<colunas-1; i++)); do for ((j=i+1;
j<colunas; 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);
colunas=${#coluna[@]}; for ((i=1; i<colunas-1; i++)); do for ((j=i+1;
j<colunas; 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


Reply to: