bash: como encontrar los strings que mejor coinciden?
Necesito resolver esto en bash: Tengo un primer string y un conjunto de strings. Necesito saber cual es el string del conjunto que mejor coincide con el primer string. Dos strings coinciden cuando comienzan con los mismos caracteres, y coinciden mejor cuando tienen el máximo de caracteres en común al inicio. Por ejemplo Primer string: 12345abcde Conjunto de strings: 12345abzzz 12345abczz 12345abcdz 12345abxde 12346abdce En el ejemplo, el string del conjunto que mejor coincide es el tercero (12345abcdz), porque tiene 9 caracteres iniciales en común con el primer string. Alguna idea de cómo evaluar eso en bash? -- Pablo Manuel Rizzo ------------------------------- http://pablorizzo.com -------------------------------
2010/8/29 Pablo Manuel Rizzo <[email protected]>:
Necesito resolver esto en bash:
Tengo un primer string y un conjunto de strings. Necesito saber cual es el string del conjunto que mejor coincide con el primer string. Dos strings coinciden cuando comienzan con los mismos caracteres, y coinciden mejor cuando tienen el máximo de caracteres en común al inicio. Por ejemplo
Primer string: 12345abcde
Conjunto de strings:
12345abzzz 12345abczz 12345abcdz 12345abxde 12346abdce
En el ejemplo, el string del conjunto que mejor coincide es el tercero (12345abcdz), porque tiene 9 caracteres iniciales en común con el primer string.
Alguna idea de cómo evaluar eso en bash?
Por ahora no encontré nada más directo que haga eso. Esta función parece que funciona, al menos para conjuntos chicos, quizá para volúmenes grandes sea mejor armar un diccionario y usar look o algo así. Si hay más de una mejor coincidencia, devuelve todas, luego cada uno elegirá de acuerdo a algún otro criterio. _________________ #!/bin/bash mejorCoincidenteCadena() { if [[ $# -lt 2 ]]; then eError "mejorCoincidenteCadena <modelo> <cadena-de-cadenas" exit 1 fi local primera="$1" shift local conjunto="$@" local coincidencias for ((i=0;i<${#primera};i++)) do coincidencias=$(echo "$conjunto" |grep "^${primera:0:$i}") if [[ "$coincidencias" = "" ]];then break else conjunto="$coincidencias" fi done echo "$conjunto" } cadenas="12345abzzz 12345abczz 12345abcdz 12345abxde 12346abdce" modelo="12345abcde" mejorCoincidenteCadena $modelo "$cadenas" _________________ -- Pablo Manuel Rizzo ------------------------------- http://pablorizzo.com -------------------------------
participants (1)
-
Pablo Manuel Rizzo