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; 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);
[EMAIL PROTECTED]; 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