Encore un script autour des CSV qui pique les yeux, je l'ai crée il y a 7 ans... en bash !
Le but (en lisant le code, je ne me souviens plus pourquoi je l'ai crée) est de transformer un fichier .txt en fichier .csv
#!/bin/dash
####################################################################################
# SYNOPSIS : bincsv nom_du_fichier_de_log_sans_l'extension_.txt #
# #
# DESCRIPTION : #
# Transforme un fichier log de l'appli xxx en fichier .csv #
# #
# DEPENDANCES : #
# /bin/bash #
# /bin/cat #
# /bin/date #
# /usr/bin/cut #
# #
####################################################################################
############################################################################################
#### Tests des arguments passé au script ####
############################################################################################
if [ "$1" == "" ] ; then
echo "Manque arguments"
echo "SYNOPSIS : ${0} nom_du_fichier_de_log_sans_l'extension_.txt"
exit 1
fi
FICHIER_SOURCE="$1.txt"
FICHIER_DEST="$1.csv"
if [ ! -e "$FICHIER_SOURCE" ] ; then
echo "ERREUR :"
echo "Le fichier de log $FICHIER_SOURCE n'existe pas"
echo "SYNOPSIS : ${0} nom_du_fichier_de_log_sans_l'extension_.txt"
exit 1
fi
if [ -e "$FICHIER_DEST" ] ; then
echo "ERREUR :"
echo "Le fichier $FICHIER_DEST existe déja"
echo "Ce script s'arrete pour ne pas l'effacer"
exit 1
fi
echo -e -n "" > ${FICHIER_DEST}
if [ ! -e "$FICHIER_DEST" ] ; then
echo "ERREUR :"
echo "Impossible de créer le fichier $FICHIER_DEST"
echo "Vérifiez les droit en écriture dans le répertoire"
exit 1
fi
############################################################################################
#### Initialisation ####
############################################################################################
DATE_DEBUT_SCRIPT=$(/bin/date)
RET_LIGNE=$(echo -e -n "\r") # caractère de retour chariot
echo "Bonjour ! Opération en cours : ${FICHIER_SOURCE} => ${FICHIER_DEST}"
############################################################################################
#### Boucle principale exécutée pour ligne du fichier source ####
############################################################################################
# Lecture mot à mot du fichier
for BRUT_LIGNE in $(/bin/cat ${FICHIER_SOURCE}); do
# Si EVENT détecté on passe a la ligne dans le fichier .csv
if [ "$BRUT_LIGNE" == "EVENT$RET_LIGNE" ]; then
echo -e "\n"
echo -e -n "\n" >> ${FICHIER_DEST}
fi
DER_CAR=$(echo "$BRUT_LIGNE" | /usr/bin/cut -c ${#BRUT_LIGNE}) # dernier car de la ligne
if [ "${DER_CAR}" == "${RET_LIGNE}" ]; then
if [ "${BRUT_LIGNE}" == "${RET_LIGNE}" ]; then
# retour chariot détecté => on n'écrit rien dans le .csv
echo -n "R"
else
# dernier caractère est retour chariot : on remplace le retour chariot par un ;
echo -n "L"
BRUT_LIGNE=$(echo "$BRUT_LIGNE" | /usr/bin/cut -c 1-$((${#BRUT_LIGNE}-1)))
echo -n "${BRUT_LIGNE}" >> ${FICHIER_DEST}
echo -n ";" >> ${FICHIER_DEST}
fi
else
# dernier caractère n'est pas un retour chariot => on est sur la même ligne, on n'oublie pas de rajouter l'espace supprimé
echo -e -n "."
echo -n "${BRUT_LIGNE} " >> ${FICHIER_DEST}
fi
done # fin du traitement pour ce mot, on passe au suivant
############################################################################################
#### Fin Boucle principale executée pour chaque ligne du fichier source ####
############################################################################################
DATE_FIN_SCRIPT=$(/bin/date)
LOAD_AVERAGE=$(/bin/cat /proc/loadavg | /usr/bin/cut -c 1-14)
echo ""
echo ""
echo "Opération réalisée : ${FICHIER_SOURCE} => ${FICHIER_DEST}"
echo "Date Debut Script : ${DATE_DEBUT_SCRIPT}"
echo "Date Fin Script : ${DATE_FIN_SCRIPT}"
echo "Load Average : ${LOAD_AVERAGE}"