Bonjour,

je viens vers vous pour vous soumettre ma problématique. J'ai deux fichiers csv que je dois traité. Ils contiennent une colonne et 16000 lignes ++ (et des retours chariots)

  • Fichier 1
  • Fichier 2

Je veux trier les ligne de mon fichiers 2 qui ne se trouvent pas dans le fichier 1 et récupérer ces dites lignes dans un troisième fichiers csv.

J'ai fait des test avec des fichiers de 3 lignes pour commencer

egrep -v $(cat monfichier1.csv | tr '\n' '|' | sed 's/.$//') onfichier2.csv > output.csv

J'ai bien le résultat escompté. Le problème est que quand je fais la manip avec mes fichiers volumineux j'ai ce message :

-bash: /bin/egrep: Liste d'arguments trop longue

Auriez vous une solution (optimisation) pour régler ce problème ?

Merci d'avance pour votre lecture.

3 réponses


coloo
Auteur
Réponse acceptée

Bon ben j'ai finalement trouvé sur stackoverflow :

awk -f script.awk f1.csv f2.csv > output.csv

script.awk:

BEGIN {
    FS = ","
}
NR>1 && NR==FNR {
    a$1] = $2
    next
}
FNR>1 { 
    print ($1 in a) ? $1 FS $1 FS "Match" : "\"\"" FS $1 FS "Unmatch"
    delete a$1] 
}
END {
    for (x in a) {
        print x FS "\"\"" FS "Unmatch"
    }
}

format en sorti :

"abc121","abc121",Match
"abc122","abc122",Match
"","abc125",Unmatch
"","abc126",Unmatch
"abc124","",Unmatch
"abc123","",Unmatch

Bonjour,

tu as essayer avec la commande diff :

$ diff -u file1 file2 > file3

Cordialement

coloo
Auteur

Jour,

La commande pass, par contre je comprends pas les significations qu'il y a dans le csv de sortie

j'ai des lignes :
avec des +
avec des -
sans rien
et d'étrange ligne enigmatique entouré de 2 @

comme au début y avait ---fichier 1
et +++fichier2

Je me suis dis que c'était les lignes qu'il y avait en plus ou en moins sur chaque fichier mais en faisant mes test, je me suis aperçut que ça ne collait à aucun de mes deux suppositions :/.

Tu peux m'éclairer sur le fichier de sorti.

Si le diff marque différent si la ligne n'est pas à la même position c'est sûr que ce n'est pas le résultat que je recherche.

exemple de csv

f1 :

"1tu"
"2tu"
"3tu"

f2 :

"2tu"
"4tu"
"3tu"

Le résultat que je veux avoir :

"4tu"

Merci quand même pour ta réponse.