> 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; 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 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]