Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 ?

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

McRbt #1 a écrit :

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,

pingouinux a écrit :

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