Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: zenok en 28 Noviembre 2014, 10:45 AM

Título: [BASH] Ordenar contactos sin utilizar sort
Publicado por: zenok en 28 Noviembre 2014, 10:45 AM
Hola,

Estoy aprendiendo Bash en FP y el profesor ha pedido que ordenemos las palabras sin utilizar sort.

La idea es que al añadir un contacto a un fichero TXT con una sintaxis como esta, inserte el nuevo contacto de forma ordenada:

Citar
Alberto:968282581
Pedrito:920145959
Pedro:920145959

Lo único que se me ocurre es separar el nombre de cada linea y comparar letra por letra del nombre sacado de la linea con el nombre del contacto a añadir para ver si coincide, aunque llega un momento que me pierdo.

¿Alguna idea o sugerencia de como es posible hacer esto?
Título: Re:
Publicado por: ivancea96 en 28 Noviembre 2014, 12:13 PM
Tú lo has dicho. Comparar letra por letra. No tiene más.
Título: Re: [BASH] Ordenar contactos sin utilizar sort
Publicado por: zenok en 28 Noviembre 2014, 12:49 PM
Lo único que he conseguido hacer es agruparlos por nombres similares

Código (bash) [Seleccionar]
#!/bin/bash
nombre=pedrito
coincidencias=0

while read linea
do
    nombrel=`echo $linea | cut -d ":" -f 1`
    length=`echo $nombre | wc -c`
    for p in `seq 1 $length`
    do
        letra_linea=`echo $nombrel | cut -b $p`
        letra_nombre=`echo $nombre | cut -b $p`

        if [ ! $letra_linea ]
        then
            if [ $coincidencias -gt 0 ]
            then
                echo $linea >> agenda.tmp
                echo "$nombre:92051623" >> agenda.tmp
            else
                echo $linea >> agenda.tmp
            fi
            break
        elif [ "$letra_linea" == "$letra_nombre" ]
        then
            coincidencias=`expr $coincidencias + 1`
        fi
    done
   
done < agenda.txt


No sabía exactamente como ordenarlos