#!/bin/bash
# Ce script compare 2 fichiers au format .csv avec des séparateurs ";"
# Le fichier 1 est le fichier de référence auquel on va comparer le fichier 2
# On va lister les lignes du fichier 1 dont la valeur de la colonne ci n'est pas trouvée dans la colonne cj du fichier 2
#
# Les fichiers sont triés et dédoublonnés à la volée sur la bonne colonne
# Les retours à la ligne sont codés à la volée au format Unix
# Le script prend en compte d'éventuelles lignes d'entete de colonne
# Date: 30/7/2024
#
# Ce script est appelable par l'executable du même nom qui est une interface graphique écrite en Python
# Il suffit juste que le script et l'executable soient dans le même répertoire et que Git Bash soit installé
#
# Auteur: David Castelain
# Debuggage
#set -x
# Verification du nombre d'arguments
if [ "$#" -ne 7 ]; then
echo "SYNTAXE: $0 [file1] [file1_numcol] [file1_nb_lines_header] [file2] [file2_numcol] [file2_nb_lines_header] [file_dest]"
echo "Extrait les lignes de file1 dont la valeur de la colonne file1_numcol n'existe pas dans la colonne file2_numcol de file2"
echo "file1 et file2 doivent être au format .csv avec des séparateurs ';'"
echo "file1_numcol: numéro de colonne à comparer du fichier 1"
echo "file1_nb_lines_header: nombre de lignes d'entête à ignorer dans le fichier 1"
echo "EXEMPLE 1: $0 droits_onglet_issn.csv 3 1 masterlist.csv 1 1 issn_manquants_master-droits.csv"
echo "EXEMPLE 2: $0 elsevier_2023_issn.csv 3 1 FileCount_Couperin2023.csv 1 1 elsevier2023_issn_manquants_master-droits.csv"
exit 1
fi
file1=$1
file1_col=$2
file1_nb_lines_header=$(expr $3 + 1)
file2=$4
file2_col=$5
file2_nb_lines_header=$(expr $6 + 1)
file_dest=$7
join -t";" -v 1 -1 ${file1_col} -2 ${file2_col} \
<(cat "${file1}" | tr -d '\r' | tail +${file1_nb_lines_header} | sed -e 's/"\([^";]*\);\([^";]*\)"/"\1.\2"/p' | sort -t";" -u -k ${file1_col},${file1_col}) \
<(cat "${file2}" | tr -d '\r' | tail +${file2_nb_lines_header} | sed -e 's/"\([^";]*\);\([^";]*\)"/"\1.\2"/p' | sort -t";" -u -k ${file2_col},${file2_col}) > "${file_dest}"