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. ;-) 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...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; doneEste funcionou perfeitamente se houver somente uma repetição por linha! em um arquivo como este aí embaixo [...] 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 |