#!/bin/bash

# 1. Comprobar paso de argumento
if [ $# -ne 1 ]; then
    echo "Uso: $0 <fichero texto>"
    exit 1
fi

ARCHIVO=$1

#Comprobar que ARCHIVO es un fichero
if [ ! -f "$ARCHIVO" ]; then
	echo "ERROR: $ARCHIVO no es un fichero o no existe"
fi

#Buscamos con grep los string que sean "Año: 195*" hasta "Año 2020". Luego, quitamos lo demas con -o y usamos el 
#ERE con -E
echo -e "\n1) Años de los libros publicados entre 1950 y 2020:"
grep -oE 'Año: (19[5-9][0-9])|(20[01][0-9])|(2020)' $ARCHIVO | grep -oE '[0-9]+'

#Ordenamos el precio para que sea mayor que 20,00€
echo -e "\n2) Precios superiores a 20 euros:"
grep -oE 'Precio: [2-9][0-9],[0-9][1-9]' $ARCHIVO | grep -oE '[0-9]+'

#Usamos el grep para filtrar los datos, sacar solamente el nombre. Sort para quitar duplicaciones. Con uniq -c te 
#cuenta las apariciones que tiene. Con set ponemos el formato requerido:

#^[[:space:]]*: Busca los espacios en blanco que pueda haber al principio de la línea.
#([0-9]+): Este es el Primer Grupo de Captura. Busca el número de veces. Al estar entre paréntesis, sed lo guarda en una "memoria" llamada \1.
#[[:space:]]+: Busca el espacio que separa el número del nombre del género.
#(.*): Este es el Segundo Grupo de Captura. Busca todo lo que queda de la línea (el nombre del género). Lo guarda en la memoria \2.
#\2 aparece \1 veces:Le decimos: "Escribe lo que guardaste en el segundo grupo, luego el texto 'aparece', y luego lo que guardaste en el primero".

echo -e "\n3) Numero de libros por genero:"
grep -E '^\[Género:' $ARCHIVO | grep -oE '\ ([a-zA-Z\-]|\ )+' | sort | uniq -c | sed -E 's/^[[:space:]]*([0-9]+)[[:space:]]+(.*)/\2 aparece \1 veces/'

#Usamos el grep para sacar la palabra que necesitamos. Usamos \b para que ni detras ni delante haya otra letra y así
#saber que es una palabra completa.
echo -e "\n4) Palabras de al menos 8 caracteres que empiezan por consonante y terminan por vocal:"
grep -oiE '\b[b-df-hj-np-tv-z][a-z]{6,}[aeiouáéíóú]\b' $ARCHIVO

#Usamos el grep para sacar la palabra que necesitamos. Buscamos doble l y q hace 0 o 1 caracteres al final o principio.
echo -e "\n5) Lineas de autor cuyo nombre o apellido contiene una doble \"l\":"
grep -E '^Autor: .*([lL][lL]).*' $ARCHIVO

#Usamos el grep para sacar la palabra que necesitamos. Buscamos el patron espacio+cualquier caracter al menos 3 veces.
echo -e "\n6) Titulos de libros con mas de tres palabras:"
grep -E '^Título:( .+){3,}' $ARCHIVO

#Usamos grep -B 4 que muestra las 4 lineas anteriores (donde esta el titulo) de las lineas donde el precio acabe
#en .99€. Luego, sacamos las lineas del título nada más.
echo -e "\n7) Titulos de libros cuyo precio termina en ,99€:"
grep -B 4 ",99€$" $ARCHIVO | grep "^Título:"

#Hacemos un proceso muy parecido al 7 y al 3. Cogemos Año para que la cuenta del uniq sea comun y con el sed 
#ponemos solamente el número
echo -e "\n8) Numero de libros con año de publicacion anterior a 2000:"
grep -E 'Año: [01][1-9]+' $ARCHIVO | grep -o "Año:" | uniq -c | sed -E 's/^[[:space:]]*([0-9]+)[[:space:]]+(.*)/\1/'

#Buscamos la secuencia que tenga una letra mayúscula y demas minusculas, y que despues, con \s indicamos un espacio
#(Tambien es posible poner un espacio a secas, como " ")
echo -e "\n9) Lineas con dos o mas palabras con mayuscula consecutivas:"
grep -E '\b[A-Z][a-z]*\s[A-Z][a-z]*\b' $ARCHIVO

#Sacamos el patrón y con sort -u, eliminamos la repetición de los géneros (como un uniq)    .
echo -e "\n10) Generos con una palabra compuesta:"
grep -E '\[Género: ([a-zA-Z]+)-([a-zA-Z]+)' $ARCHIVO | sort -u