#1 Le 12/04/2016, à 09:16
- McRbt
[Résolu]Comparaison 2 fichiers .csv
Bonjour à tous,
Je cherche conseil et non résolution de mon code.
J'ai 2 fichiers .csv en entrée.
Les deux ressemblent à ceci :
HOST;IP;AUTEUR;DATE
WIN10DFZE;127.0.0.1;XXX;10042016
LIN1402;127.0.0.2;XXX;11042016
UBUN70YO;127.0.0.3;XXX;12042015
Je cherche la méthode la plus simple pour pouvoir tester l'existence d'une adresse IP (donc la 2ème colonne), d'un fichier à un autre.
Je m'explique :
Fichier1.csv et Fichier2.csv
On prend la première ligne de Fichier1.csv, on chope l'adresse IP dans la 2ème colonne, on teste si cette dernière existe dans le Fichier2.csv.
Si elle est existante, on ne fait rien.
Sinon, on en sort un Fichier3.csv avec les lignes qui ne concordent pas.
J'ai pensé à awk, sed, sort, join et while read line.
Mon code actuel :
#!/bin/bash
#AUTHOR : McRbt
#AIM : Trouver les incidences entre Fichier1 et Fichier2
#DATE : 10/04/16
clear
GLPI=$1
RSI=$2
while [ -z "$GLPI" ] ; do
read -p 'Renseignez le chemin du fichier GLPI : ' GLPI
done
cat $GLPI | while read line
do
HOST_GLPI=`echo $line | cut -d';' -f 1`
IP_GLPI=`echo $line | cut -d';' -f 2`
echo "$HOST_GLPI;$IP_GLPI" | sed 's/"//g'
#cat $RSI | while read line
#do
# HOST_RSI=`echo $line | cut -d';' -f 1`
# IP_RSI=`echo $line | cut -d';' -f 2`
#done
done
Dernière modification par McRbt (Le 12/04/2016, à 14:14)
Hors ligne
#2 Le 12/04/2016, à 09:52
- lann
Re : [Résolu]Comparaison 2 fichiers .csv
Peut être plus simple avec une macro dans LibreOffice ?
<Modéré>
Hors ligne
#3 Le 12/04/2016, à 09:57
- Watael
Re : [Résolu]Comparaison 2 fichiers .csv
salut,
libreOffice ? -1 !
une seule instance de awk peut faire ça rapidement, en lisant le premier fichier tu remplis un tableau (les tableaux en awk sont associatifs : ils prennent, indifféremment, en indice des nombres ou du texte) en prenant l'IP comme indice, puis quand le deuxième fichier est lu, vérifier si chaque IP est dans le tableau.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 12/04/2016, à 10:12
- McRbt
Re : [Résolu]Comparaison 2 fichiers .csv
Watael,
Une seule instance de awk ?
As-tu une idée ou une documentation sur awk pour ce type de traitement ?
Hors ligne
#5 Le 12/04/2016, à 10:16
- pires57
Re : [Résolu]Comparaison 2 fichiers .csv
Awk est un outil bien utile et effectivement il peut être utilisé dans ton cas.
Je te recommande de potasser un peu la doc, la syntaxe de awk est loin d'être difficile.
http://www.shellunix.com/awk.html
Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn
Hors ligne
#6 Le 12/04/2016, à 11:30
- pingouinux
Re : [Résolu]Comparaison 2 fichiers .csv
Bonjour,
Essaye ceci :
awk -F\; '{if(NR==FNR){t[$2]=""}else{if(FNR==1||!($2 in t))print}}' Fichier2.csv Fichier1.csv >Fichier3.csv
Hors ligne
#7 Le 12/04/2016, à 12:30
- MicP
Re : [Résolu]Comparaison 2 fichiers .csv
Un script bash
#!/bin/bash
# En paramètre les noms des 2 fichiers csv
extrIp(){ monIp=${1#*;}; monIp=${monIp%%;*}; echo $monIp; }
while read ligneA && read ligneB <&3
do
[[ "$(extrIp $ligneA)" = "$(extrIp $ligneB)" ]] || echo "L'adresse IP est différente entre $1 -> \"${ligneA}\" et $2 -> \"${ligneB}\"";
done <$1 3<$2
Mais je ne suis pas sûr que ça corresponde à ce qui était demandé…
…On prend la première ligne de Fichier1.csv, on chope l'adresse IP dans la 2ème colonne, on teste si cette dernière existe dans le Fichier2.csv.…
J'avais compris : "…on teste si l'adresse IP est la même dans la ligne correspondante du Fichier2.csv…"
Dernière modification par MicP (Le 12/04/2016, à 12:42)
Hors ligne
#8 Le 12/04/2016, à 12:41
- Watael
Re : [Résolu]Comparaison 2 fichiers .csv
pas tout à fait : là, tu compares les fichiers ligne par ligne.
et rien n'indique que les fichiers ont le même nombre de lignes.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 12/04/2016, à 12:46
- MicP
Re : [Résolu]Comparaison 2 fichiers .csv
Effectivement, j'ai pas dû bien comprendre ce qui était demandé.
Hors ligne
#10 Le 12/04/2016, à 12:57
- McRbt
Re : [Résolu]Comparaison 2 fichiers .csv
Avant toutes choses, merci pour votre participation.
Watael, MicP,
pas tout à fait : là, tu compares les fichiers ligne par ligne.
et rien n'indique que les fichiers ont le même nombre de lignes.
C'est exact, j'aurais dû être plus précis dans mon explication.
pingouinux,
J'ai essayer ta ligne de commande sur deux fichiers test (que je vous transmet en bas de page, ce sera mieux).
Elle me ressort bien quelque chose, mais pas ce que j'attends.
Fichier1.csv :
HOST;IP;TEST;LOL;RAL;BOL;BIBI;CAVE;GROUILLE;FUMER;GAROTr
lnxe;127.0.0.241;MDR;KIKI;TEST;NON;OUI;;;
lnxr;127.0.0.2;XPTDR;KEKE;LAC;OUAIS;;;
lnxq;127.0.0.3;MORT;PAPA;MAMAN;;;;;
TESTLN;127.0.0.4;KILL;FRAPPE;PEUF;RAP;;;;
Fichier2.csv :
HOST;IP;TEST;LOL;RAL;BOL;BIBI;CAVE;GROUILLE;FUMER;GAROT
TESTLN;127.0.0.87;MDR;KIKI;TEST;NON;OUI;;;
lnxr;127.0.0.34;XPTDR;KEKE;LAC;OUAIS;;;
lnxq;127.0.0.3;GROS;TAS;BATEAU;;;;;
lnx99LN;127.0.0.241;KILL;FRAPPE;PEUF;RAP;;;;
Ne faîtes pas attention aux données, c'est purement du test...
On retrouve 2 adresses ip similaires dans les deux fichiers. Le but de l'opération est de rechercher une similitude du Fichier1.csv au Fichier2.csv. Si tel est le cas, alors on '> Fichier3.csv' le début de la ligne.
Dans le cas présent, Fichier3.csv devrait ressembler à :
Fichier3.csv :
lnxe;127.0.0.241
lnxq;127.0.0.3
(Le reste des lignes est optionnel, là ou pas là, aucune importance.)
Dernière modification par McRbt (Le 12/04/2016, à 12:58)
Hors ligne
#11 Le 12/04/2016, à 13:10
- pingouinux
Re : [Résolu]Comparaison 2 fichiers .csv
On prend la première ligne de Fichier1.csv, on chope l'adresse IP dans la 2ème colonne, on teste si cette dernière existe dans le Fichier2.csv.
Si elle est existante, on ne fait rien.
Sinon, on en sort un Fichier3.csv avec les lignes qui ne concordent pas.
En #10, tu récupères les IP communes aux deux fichiers, ce n'est pas cohérent.
Édité : Si tu veux récupérer les IP communes :
awk -F\; '{if(NR==FNR){t[$2]=""}else{if(FNR>1&&($2 in t))print}}' Fichier2.csv Fichier1.csv >Fichier3.csv
Dernière modification par pingouinux (Le 12/04/2016, à 13:15)
Hors ligne
#12 Le 12/04/2016, à 14:14
- McRbt
Re : [Résolu]Comparaison 2 fichiers .csv
pingouinux,
En #10, tu récupères les IP communes aux deux fichiers, ce n'est pas cohérent.
Tu as raison, c'est de ma faute. Mais sache que j'utiliserai tes 2 commandes, c'est exactement ce qu'il me faut.
Merci à vous 5, je passe en résolu.
Dernière modification par McRbt (Le 12/04/2016, à 14:14)
Hors ligne
#13 Le 12/04/2016, à 14:52
- MicP
Re : [Résolu]Comparaison 2 fichiers .csv
Alors peut-être celui-là :
fich1="Fichier1.csv"; fich2="Fichier2.csv"; fich3="Fichier3.csv"
tail -n+2 "${fich1}" | grep $(awk -F ";" '{print $2}') "${fich2}" | awk -F ";" '{print $1";"$2}' > "${fich3}"
Dernière modification par MicP (Le 12/04/2016, à 14:58)
Hors ligne