Concaténation
Résolu
tht123
Messages postés
72
Date d'inscription
Statut
Membre
Dernière intervention
-
tht123 Messages postés 72 Date d'inscription Statut Membre Dernière intervention -
tht123 Messages postés 72 Date d'inscription Statut Membre Dernière intervention -
Salut,
Pour rassembler des fichiers avec sed :
sed -n p fich1 fich2 > fich3
ou :
sed -n p fich* > fichnew
Mon problème est que lorsque je concatene sed ajoute les lignes et j'en ai certaines qui sont dupliquées. Alors j'utilise sort et uniq qui trient et enlève les doublons.
Or, dans mon cas, fich1 est une mise à jour de fich2 donc il faut que le contenu de fich1 soit ajouté à fich2 en écrassant les lignes existantes. Existe t-il des fonction qui permettent ce genre de manip??
BAV
Pour rassembler des fichiers avec sed :
sed -n p fich1 fich2 > fich3
ou :
sed -n p fich* > fichnew
Mon problème est que lorsque je concatene sed ajoute les lignes et j'en ai certaines qui sont dupliquées. Alors j'utilise sort et uniq qui trient et enlève les doublons.
Or, dans mon cas, fich1 est une mise à jour de fich2 donc il faut que le contenu de fich1 soit ajouté à fich2 en écrassant les lignes existantes. Existe t-il des fonction qui permettent ce genre de manip??
BAV
11 réponses
Personnellement je ne suis pas sûre d'avoir compris ce que tu veux faire, peux-tu donner un exemple ?
Bonne chance
Bonne chance
Bonjour désolé du manque de clareté :
Exemple:
Fich1:
Ref01 1234 7896 9516
Ref02 4564 4475 5787
Ref03 2134 7899 4237
Fich2:
Ref01 1234 7896 9516
Ref03 12374 4447 9999
Ref04 1234 4567 9874
Après concaténation dans Fich :
Ref01 1234 7896 9516
Ref02 4564 4475 5787
Ref03 12374 4447 9999
Ref04 1234 4567 9874
DONC, ici fich2 à mis à jour fich1 en écrassant déjà les données existantes (Refxx). En fait Refxx est le point commun et les valeurs associées changent dans le temps.==> MAJ
Est-ce pluis clair?
Exemple:
Fich1:
Ref01 1234 7896 9516
Ref02 4564 4475 5787
Ref03 2134 7899 4237
Fich2:
Ref01 1234 7896 9516
Ref03 12374 4447 9999
Ref04 1234 4567 9874
Après concaténation dans Fich :
Ref01 1234 7896 9516
Ref02 4564 4475 5787
Ref03 12374 4447 9999
Ref04 1234 4567 9874
DONC, ici fich2 à mis à jour fich1 en écrassant déjà les données existantes (Refxx). En fait Refxx est le point commun et les valeurs associées changent dans le temps.==> MAJ
Est-ce pluis clair?
Bonjour désolé du manque de clareté :
Exemple:
Fich1:
Ref01 1234 7896 9516
Ref02 4564 4475 5787
Ref03 2134 7899 4237
Fich2:
Ref01 1234 7896 9516
Ref03 12374 4447 9999
Ref04 1234 4567 9874
Après concaténation dans Fich :
Ref01 1234 7896 9516
Ref02 4564 4475 5787
Ref03 12374 4447 9999
Ref04 1234 4567 9874
DONC, ici fich2 à mis à jour fich1 en écrassant déjà les données existantes (Refxx). En fait Refxx est le point commun et les valeurs associées changent dans le temps.==> MAJ
Est-ce pluis clair?
Exemple:
Fich1:
Ref01 1234 7896 9516
Ref02 4564 4475 5787
Ref03 2134 7899 4237
Fich2:
Ref01 1234 7896 9516
Ref03 12374 4447 9999
Ref04 1234 4567 9874
Après concaténation dans Fich :
Ref01 1234 7896 9516
Ref02 4564 4475 5787
Ref03 12374 4447 9999
Ref04 1234 4567 9874
DONC, ici fich2 à mis à jour fich1 en écrassant déjà les données existantes (Refxx). En fait Refxx est le point commun et les valeurs associées changent dans le temps.==> MAJ
Est-ce pluis clair?
Yep j'ai compris. Autres questions :
- est ce que les références sont forcément triées par ordre croissant dans les fichiers ?
- est ce que tu veux absolument le faire en shell ou on peut utiliser d'autres langages ?
- est ce que les références sont forcément triées par ordre croissant dans les fichiers ?
- est ce que tu veux absolument le faire en shell ou on peut utiliser d'autres langages ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pour le references, si ça simplifie on peut les avoir dans l'ordre !
Perso, j'aimerai mieu avec awk,sed,, ou grep ...
Ok?
Perso, j'aimerai mieu avec awk,sed,, ou grep ...
Ok?
Salut,
vu ton message N° 3 alors tu peux faire comme ça
1. sauvegarde de fichier2
vu ton message N° 3 alors tu peux faire comme ça
1. sauvegarde de fichier2
cp fichier2 fichier2.save2. créer le patch
diff -c fichier2 fichier1 > patch.fic3. mise à jour de fichier2
patch < patch.ficet le fichier2 sera à jour
Je suis très sûr puisque j'ai testé sur debian, voilà pourquoi il faut préciser la configuration :-))
affiche le résultat de la commande
lami20j
affiche le résultat de la commande
whereis patch--
lami20j
Salut,
Voilà une solution avec "sed, grep, sort et uniq".
Seule contrainte il faut que le champ de référence soit toujours égal en longueur (au pire on pourra toujours essayer de l'adapter à ton cas).
Autre contrainte, ça marche dans un environnement GNU/Linux, si tu as des difficultés à le faire exécuter sous Cygwin, il va falloir grandement penser à migrer au plus vite sous le pingouin, d'autant plus que tu t'obstines à te servir de commandes GNU/Linux, donc pourquoi ne pas faire le grand saut, et au cas où ce ne te serait pas possible, essayer d'adopter un pingouin ne serait-ce que dans une machine virtuelle... à méditer, non ?
Bon le script :
Voilà une solution avec "sed, grep, sort et uniq".
Seule contrainte il faut que le champ de référence soit toujours égal en longueur (au pire on pourra toujours essayer de l'adapter à ton cas).
Autre contrainte, ça marche dans un environnement GNU/Linux, si tu as des difficultés à le faire exécuter sous Cygwin, il va falloir grandement penser à migrer au plus vite sous le pingouin, d'autant plus que tu t'obstines à te servir de commandes GNU/Linux, donc pourquoi ne pas faire le grand saut, et au cas où ce ne te serait pas possible, essayer d'adopter un pingouin ne serait-ce que dans une machine virtuelle... à méditer, non ?
Bon le script :
[jp@MDK tmpfs]$ cat Fich1 Ref01 1234 7896 9516 Ref02 4564 4475 5787 Ref03 2134 7899 4237 [jp@MDK tmpfs]$ cat Fich2 Ref01 1234 7896 9516 Ref03 12374 4447 9999 Ref04 1234 4567 9874 [jp@MDK tmpfs]$ cat foo.sh #! /bin/bash sed -n '/^$/!p' Fich1 Fich2 | sort | uniq > Fich while read line do ref=$(cut -d " " -f1 <<<"$line") var=$(grep "$ref" Fich1) sed -i '/'"$var"'/d' Fich done < <(sed -n '/^$/!p' Fich1 Fich2 | sort | uniq | uniq -w6 -d) [jp@MDK tmpfs]$ ./foo.sh [jp@MDK tmpfs]$ cat Fich Ref01 1234 7896 9516 Ref02 4564 4475 5787 Ref03 12374 4447 9999 Ref04 1234 4567 9874 [jp@MDK tmpfs]$;-))
YESYESYESYESY
YOUPIIIIIIIII
Là tu fais fort, il sagisait bien du caratère de fin de ligne!
Merci encore
YOUPIIIIIIIII
Là tu fais fort, il sagisait bien du caratère de fin de ligne!
Merci encore