#!/bin/bash

# Verificamos los argumentos:
help() {
    echo "#> ${0}: Script encargado de hacer funciones de sed personalizadas"
    echo ">> Es necesario pasar parámetros para indicar que deseamos hacer."
    echo "#> Uso de parámetros (todos opcionales):"
    echo -e "\t'-e': End. Añade al final de todas las líneas del archivo el patrón que pasemos como parámetro"
    echo -e "\t'-e': File. Fichero sobre el que actuar"
    echo "#> Uso: $0 [-e ;|valor] [-f fichero]"
    echo -e "Ej. ${0} '-e' ';' -f /tmp/fichero.csv"
    exit 1
}

[[ "${#}" == 0 || "${1}" == "-h" || "${1}" == "--help" ]] && help

function check_exit_fichero() {
    [[ ! -f "$FICHERO" ]] && \
    echo "Error: El archivo '$FICHERO' no existe." && \
    help
}

function end_agregar_final_lineas() {
    # Procesamiento:
    # Usamos perl con el delimitador {} para evitar problemas si el valor contiene '/'
    # s{\r?\n$}{...} busca el final de línea (sea Windows \r\n o Linux \n)
    # y lo reemplaza por el valor seguido de \n.
    perl -pe 's{\r?\n$}{'"$VALOR"'\n}' "${FICHERO}" | sponge "${FICHERO}"
    echo "#> ${FICHERO}: Operación completada. '${VALOR}' añadido al final de cada línea." >&2
}

FICHERO="null"
_END="false"
while getopts :he:f: OPT; do
    case "${OPT}" in
        e) VALOR="${OPTARG}"
        _END="true" ;;
        f) FICHERO="${OPTARG}"
        check_exit_fichero ;;
        \?) help ;;
        :) help ;;
        h | *) help ;;
    esac
done

"${_END}" && end_agregar_final_lineas
exit 0
