Foro de elhacker.net

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
  1. #!/bin/bash
  2. nombre=pedrito
  3. coincidencias=0
  4.  
  5. while read linea
  6. do
  7.    nombrel=`echo $linea | cut -d ":" -f 1`
  8.    length=`echo $nombre | wc -c`
  9.    for p in `seq 1 $length`
  10.    do
  11.        letra_linea=`echo $nombrel | cut -b $p`
  12.        letra_nombre=`echo $nombre | cut -b $p`
  13.  
  14.        if [ ! $letra_linea ]
  15.        then
  16.            if [ $coincidencias -gt 0 ]
  17.            then
  18.                echo $linea >> agenda.tmp
  19.                echo "$nombre:92051623" >> agenda.tmp
  20.            else
  21.                echo $linea >> agenda.tmp
  22.            fi
  23.            break
  24.        elif [ "$letra_linea" == "$letra_nombre" ]
  25.        then
  26.            coincidencias=`expr $coincidencias + 1`
  27.        fi
  28.    done
  29.  
  30. done < agenda.txt

No sabía exactamente como ordenarlos