Script en bash

Imagen de nene45
0 puntos

Hola compañeros tengo una duda sobre un script en bash. Os comento, tengo que crear un script que lea información de un fichero de texto de este tipo:

1990:Juan:Fernández:Hombre:Cádiz
2000:Cristina:García:Mujer:Murcia
2001:Pedro:Cózar:Hombre:Córdoba
1990:Lua:Rey:Mujer:Madrid
2005:Santiago:Román:Hombre:Barcelona
2000:Iván:Dominguez:Hombre:Jerez
1990:Jesús:Ríos:Hombre:Sevilla
2001:Sara:Castillo:Torremolinos

Al ejecutar el script debe devolvernos los datos filtrados por el año de esta manera:

Año: 1990
Fernández, Juan
Rey, Lua
Ríos, Jesús

Año: 2000
García, Cristina
Domínguez, Iván

Año: 2001
Cózar, Pedro
Castillo, Sara

Año: 2005
Román, Santiago

Es decir nos muestra los datos según el año, ordenados los años de menor a mayor.

Yo he utilizado la orden cut para filtrar los datos, pero NO SÉ COMO HACER PARA QUE EL AÑO SÓLO APAREZCA UNA VEZ tal como lo pongo en el ejemplo. Para filtrar los nombres y apellitos uso:

NOMBRE=`cat $fichero | cut -d ":" -f2`
APELLIDOS=`cat $fichero | cut -d ":" -f3`

Decir que la variable $fichero contiene la direccion del archivo.

Ojalá puedan ayudarme, porque por más que le doy vueltas no consigo hacer que funcione.

Muchas gracias a todos. Saludos!!

Imagen de joseluis
+1
0
-1

A bote pronto se me ocurren un par de opciones, que pasan todas por ordenar antes el fichero (utiliza el comando sort para ello en lugar de cat).
Una de las posibilidades es recorrer línea a línea el fichero ordenado (es decir mediante el sort y un while) y por cada línea "cortar" los datos que te interesen, por ejemplo

    anyo=$(echo ${linea} | cut -d":" -f1)

o

    apellido=$(echo ${linea} | cut -d":" -f3)

(suponiendo que en linea tengas el contenido de la línea del fichero que estés leyendo); de esa forma lo único que tienes que hacer es pintar el año cuando "cambia" de una línea a otra.
La otra posibilidad es que crear tres arrays, uno para el año, otro para el nombre y otro para el apellido a partir del fichero ordenado (los 3 tendrán el mismo número de elementos), y luego recorrer los arrays y pintar el resultado, teniendo en cuenta como antes que el año solo lo cambias cuando sea distinto del anterior. Para generar el array de nombres puedes hacerlo con:

    nombre=($(sort ${fichero} | cut -d":" -f2))

Suponiendo que en la variable fichero tengas el nombre del fichero con tus datos.

+1
0
-1

Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado