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)
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.
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
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.