Script concaténation deux fichier
Résolu/Fermé
A voir également:
- Script concaténation deux fichier
- Fichier rar - Guide
- Script vidéo youtube - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
37 réponses
kilian
Messages postés
8732
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
5 février 2025
1 526
6 août 2009 à 09:15
6 août 2009 à 09:15
Donc il faut que tu jartes les doublons en même temps c'est ça?
Je connais pas ksh, mais à ce que je vois, l'emploi du for semble être comme dans bash.
Ca devrait ressembler à un truc du genre:
Ou quelque chose dans ce goût là.
Je connais pas ksh, mais à ce que je vois, l'emploi du for semble être comme dans bash.
Ca devrait ressembler à un truc du genre:
all="" for $fichier in "fichier1 fichier2" for $token in "sed 's/;/ /' $fichier" do found=false for $elm in $all do if $elm == $token then found = true fi done if $found == false then all="$all $token" echo $token >> fichier_union fi done done
Ou quelque chose dans ce goût là.
Bonjour Killian et merci pour ta réponse.
je ne saisis pas totalement le script (désolé je suis un peu débutant) et celui me dit qu'il y a une erreur au for en ligne 4.
Par hasard, après un FOR, il n'y a pas un "do" ?
Et je ne saisis pas la variable tolken.
Merci encore pour ton aide.
Amicalement
Steph70
je ne saisis pas totalement le script (désolé je suis un peu débutant) et celui me dit qu'il y a une erreur au for en ligne 4.
Par hasard, après un FOR, il n'y a pas un "do" ?
Et je ne saisis pas la variable tolken.
Merci encore pour ton aide.
Amicalement
Steph70
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
6 août 2009 à 11:05
6 août 2009 à 11:05
Salut,
Pourquoi pas
106485010510997108
Pourquoi pas
cat fic1 fic2 > fic3 && perl -pi -e 's/\n/;/' fic3--
106485010510997108
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
6 août 2009 à 11:07
6 août 2009 à 11:07
Re,
Ou utiliser un tr "\n$" ";"
Ou utiliser un tr "\n$" ";"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 898
6 août 2009 à 12:01
6 août 2009 à 12:01
Salut,
Il y a combien de champs sur chaque ligne ?
Parce qu'il existe la commande "join" :
Il y a combien de champs sur chaque ligne ?
Parce qu'il existe la commande "join" :
ssh$ cat fich fic mag;code_art;campagne;st_juillet;st_aout;etc code_art;campagne;pma_juillet;pma_aout;etc ssh$ join -t';' -1 2 -2 1 -o '1.1,1.2,1.3,1.4,1.5,1.6,2.3,2.4,2.5' fich fic mag;code_art;campagne;st_juillet;st_aout;etc;pma_juillet;pma_aout;etc ssh$;-))
Merci a tous,
Le souci est que les deux fichiers ne peuvent pas simplement être joint, il faut que les lignes du premier correspondent bien aux lignes du deuxième.
Ce que je veux dire c'est que dans le premier fichier, la première ligne ne correspond pas forcément à la première ligne du deuxième.
De plus, a priori, il me semble que join n'affichera pas les lignes vides d'un des deux fichiers. Exemple, j'ai bien du st_juillet mais en face je n'ai pas de pma_juillet.
Merci quand même pour votre aide précieuse, vous êtes tous super.
Amicalement
Steph70
Le souci est que les deux fichiers ne peuvent pas simplement être joint, il faut que les lignes du premier correspondent bien aux lignes du deuxième.
Ce que je veux dire c'est que dans le premier fichier, la première ligne ne correspond pas forcément à la première ligne du deuxième.
De plus, a priori, il me semble que join n'affichera pas les lignes vides d'un des deux fichiers. Exemple, j'ai bien du st_juillet mais en face je n'ai pas de pma_juillet.
Merci quand même pour votre aide précieuse, vous êtes tous super.
Amicalement
Steph70
Bonjour,
J'ai essayé join mais ca coince et j'ai un message d'erreur
A l'aide
Amicalement
Steph70
J'ai essayé join mais ca coince et j'ai un message d'erreur
unexpected operator
A l'aide
Amicalement
Steph70
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 898
7 août 2009 à 12:16
7 août 2009 à 12:16
Merci d'afficher les fichiers, la commande et le message d'erreur (copier/coller du terminal).
Pardon, est allé un peu vite.
voici le script en complet .
Merci pour votre aide
Steph70
voici le script en complet .
while [ `cat D_STO2.CSV` -ne EOF ];do join -t';' -1 2 -2 1 -o '1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10,1.11,1.12,1.13,1.14,1.15,2.3,2.4,2.5,2.6,2.7,2.8,2.9,2.10,2.11,2.12,2.13,2.14' D_STO2.CSV D_PMA2.CSV >>stockpma.csv done
Merci pour votre aide
Steph70
Pardon,
le script ne comprend que la ligne "join", le reste est inutile.
Par contre, j'ai un deuxième champs (campagne) qui devrait être utilisé pour le tri et à priori ca n'est pas possible avec join.
J'ai bien pensé a faire des fichiers temporaires par campagne mais c'est extremement long. (y a un peu plus de 400 000lignes.
Si vous avez une idée.
Merci
Amicalement
Steph70
le script ne comprend que la ligne "join", le reste est inutile.
Par contre, j'ai un deuxième champs (campagne) qui devrait être utilisé pour le tri et à priori ca n'est pas possible avec join.
J'ai bien pensé a faire des fichiers temporaires par campagne mais c'est extremement long. (y a un peu plus de 400 000lignes.
Si vous avez une idée.
Merci
Amicalement
Steph70
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 898
7 août 2009 à 16:02
7 août 2009 à 16:02
Sans des exemples des fichiers d'entrée c'est difficile de comprendre pourquoi la commande "join" merdoie ;-(
Si tu veux voici un exemple.
Le premier fichier comprend ceci :
Le deuxième fichier comprend cela :
Amicalement
Steph70
Le premier fichier comprend ceci :
mag;code_art;campagne;st_juillet;st_aout;etc 201;106;2007;12;23;etc 201;206;2008;11;13;etc 113;206;2007;12;14;etc 112;208;2008;34;25;etc
Le deuxième fichier comprend cela :
code_art;campagne;pma_juillet;pma_aout;etc 206;2007;112;118,etc 201;2008;115;120;etc 206;2008;175;195;etc 106;2007;340;152;etc 208;2008;32;12;etc etc.........</cotde> et le fichier final devrait ressembler à cela : <code>mag;code_art;campagne;st_juillet;st_aout;etc;pma_juillet;pma_aout;etc 201;206;2008;11;13;etc;112;118;etc 201;106;2007;12;23;etc;340;152;etc 112;208;2008;34;25;etc;32;12;etc
Amicalement
Steph70
Ce qui fait que je devrais faire 2 jointures : une sur le code_art et l'autre sur la campagne.
Merci encore pour votre aide précieuse
Amicalement
steph70
Merci encore pour votre aide précieuse
Amicalement
steph70
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 898
8 août 2009 à 08:49
8 août 2009 à 08:49
Ça ne pourra malheureusement pas marcher avec join ;-((
Extrait du man :
Extrait du man :
fichier_1 et fichier_2 doivent être préalablement triés en ordre crois- sant (pas nécessairement numérique) sur leur champ utilisé pour la fusion.Désolé ;-(
dubcek
Messages postés
18778
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
5 avril 2025
5 630
8 août 2009 à 15:44
8 août 2009 à 15:44
hello
comment arrives-tu à ces lignes avec les deux fichiers ?
201;206;2008;11;13;etc;112;118;etc
201;106;2007;12;23;etc;340;152;etc
112;208;2008;34;25;etc;32;12;etc
comment arrives-tu à ces lignes avec les deux fichiers ?
201;206;2008;11;13;etc;112;118;etc
201;106;2007;12;23;etc;340;152;etc
112;208;2008;34;25;etc;32;12;etc
Bonjour,
Ben justement c'est la question. Comment faire pour arriver à ce resultat.
Amicalement
Steph70
Ben justement c'est la question. Comment faire pour arriver à ce resultat.
Amicalement
Steph70
dubcek
Messages postés
18778
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
5 avril 2025
5 630
9 août 2009 à 09:45
9 août 2009 à 09:45
je te demande quelle est la logique, méthode,intention,algorithme pour arriver à ça
201;206;2008;11;13;etc;112;118;etc
201;106;2007;12;23;etc;340;152;etc
112;208;2008;34;25;etc;32;12;etc
avec
201;106;2007;12;23;etc
201;206;2008;11;13;etc
113;206;2007;12;14;etc
112;208;2008;34;25;etc
et
206;2007;112;118,etc
201;2008;115;120;etc
206;2008;175;195;etc
106;2007;340;152;etc
208;2008;32;12;etc
201;206;2008;11;13;etc;112;118;etc
201;106;2007;12;23;etc;340;152;etc
112;208;2008;34;25;etc;32;12;etc
avec
201;106;2007;12;23;etc
201;206;2008;11;13;etc
113;206;2007;12;14;etc
112;208;2008;34;25;etc
et
206;2007;112;118,etc
201;2008;115;120;etc
206;2008;175;195;etc
106;2007;340;152;etc
208;2008;32;12;etc
Ah ok, désolé, je suis un peu lent à la comprenote
Et bien on compare les deux champs communs des fichiers que sont code_art et campagne, si les deux champs sont identiques on les inscrits en ligne dans un troisième fichiers en prenant soin malgré tout de ne pas inscrire ne double les champs de fusion (code_art et campagne)
Après quelques recherches, il me semble que cela doit être possible avec awk et FR et NFR
Mais malgré les exemples trouvés de ci dela sur le net, je n'arrive pas à mettre en forme.
Y a t'il u pro de awk par ici ?
Merci encore pour votre aide
Amicalement
Steph70
Et bien on compare les deux champs communs des fichiers que sont code_art et campagne, si les deux champs sont identiques on les inscrits en ligne dans un troisième fichiers en prenant soin malgré tout de ne pas inscrire ne double les champs de fusion (code_art et campagne)
Après quelques recherches, il me semble que cela doit être possible avec awk et FR et NFR
Mais malgré les exemples trouvés de ci dela sur le net, je n'arrive pas à mettre en forme.
Y a t'il u pro de awk par ici ?
Merci encore pour votre aide
Amicalement
Steph70
asevere
Messages postés
13095
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
23 novembre 2024
426
9 août 2009 à 13:50
9 août 2009 à 13:50
Olà,
Awk ne me parait pas le plus judicieux, il n'est pas fait pour lire & ttraiter deux fichiers simultanément :)
Perso, j'utiliserait join, comme jp.
Etant donné que join ne sait pas faire de jointure sur plus d'un champ, il faut commencer par deux petites transformations pour n'avoir qu'un seul champ!
A prioris, ça semble faire l'affaire sur les exemple donnés :)
a plus
PS: j'ai utiliser l'arobase en me basant sur l'idée qu'il ne devrait apparaitre à aucun autre endroit dans les fichiers, c'est fesable avec l'underscore, mais moins générique, ou avec tout autre caractère nonprésent :)
Awk ne me parait pas le plus judicieux, il n'est pas fait pour lire & ttraiter deux fichiers simultanément :)
Perso, j'utiliserait join, comme jp.
Etant donné que join ne sait pas faire de jointure sur plus d'un champ, il faut commencer par deux petites transformations pour n'avoir qu'un seul champ!
#!/bin/bash cat > fic1 << EOF mag;code_art;campagne;st_juillet;st_aout;etc 201;106;2007;12;23;etc 201;206;2008;11;13;etc 113;206;2007;12;14;etc 112;208;2008;34;25;etc EOF cat > fic2 << EOF code_art;campagne;pma_juillet;pma_aout;etc 206;2007;112;118,etc 201;2008;115;120;etc 206;2008;175;195;etc 106;2007;340;152;etc 208;2008;32;12;etc EOF # 1: Transformer code_art;campagne en code_art@camapagne, et trier le fichier numeriquement sur le champ 2 sed -r 's/^([^;]+);([^;]+);([^;]+);(.*)$/\1;\2@\3;\4/' fic1 |sort -n -t ';' -k 2 > fic1.mod # 1: Transformer code_art;campagne en code_art@camapagne, et trier le fichier numeriquement sur le champ 1 sed -r 's/^([^;]+);([^;]+);(.*)$/\1@\2;\3/' fic2 |sort -n -t ';' -k 1 > fic2.mod #3: Joindre les fichiers sur les champ 2 du fichier 1 et 1 du fichier2, remettre le champ mag à la bonne place, et separer le champ code_art@campagne en deux champ distincts join -1 2 -2 1 -t ';' fic1.mod fic2.mod | sed -r 's/^(.+)@([^;]+);([^;]+);(.*)$/\3;\1;\2;\4/'
A prioris, ça semble faire l'affaire sur les exemple donnés :)
a plus
PS: j'ai utiliser l'arobase en me basant sur l'idée qu'il ne devrait apparaitre à aucun autre endroit dans les fichiers, c'est fesable avec l'underscore, mais moins générique, ou avec tout autre caractère nonprésent :)
asevere
Messages postés
13095
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
23 novembre 2024
426
9 août 2009 à 14:07
9 août 2009 à 14:07
PS2:
J'avais pas vu que les fichiers étaient très volumineux... mais sans fichiers temporaires ça ne me parait difficilement jouable...
Elle viennent d'ou ces données ? Si lle viennent d'une base de donnée, il faudrait extraire directement le fichier voulu (c'est une opération bien plus simple en sql, qu'en shell, d'ailleurs c'est a ça que ça sert)...
J'avais pas vu que les fichiers étaient très volumineux... mais sans fichiers temporaires ça ne me parait difficilement jouable...
Elle viennent d'ou ces données ? Si lle viennent d'une base de donnée, il faudrait extraire directement le fichier voulu (c'est une opération bien plus simple en sql, qu'en shell, d'ailleurs c'est a ça que ça sert)...
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 898
9 août 2009 à 14:32
9 août 2009 à 14:32
Salut,
J'ai la nette impression que tu t'es cassé les nénettes pour pas grand chose ;-((
Si on en croit sa dernière explication la correspondance des champs ne se fait pas sur la même ligne des 2 fichiers joins côte à côte, mais sur la correspondance des champs de n'importe quelle ligne (enfin d'après les explications) ;-((
Résultat escompté :
J'ai la nette impression que tu t'es cassé les nénettes pour pas grand chose ;-((
Si on en croit sa dernière explication la correspondance des champs ne se fait pas sur la même ligne des 2 fichiers joins côte à côte, mais sur la correspondance des champs de n'importe quelle ligne (enfin d'après les explications) ;-((
Résultat escompté :
201;206;2008;11;13;etc;112;118;etc 201;106;2007;12;23;etc;340;152;etc 112;208;2008;34;25;etc;32;12;etcRésultat d'un paste :
$ paste fich1 fich2 201;106;2007;12;23;etc 206;2007;112;118,etc 201;206;2008;11;13;etc 201;2008;115;120;etc 113;206;2007;12;14;etc 206;2008;175;195;etc 112;208;2008;34;25;etc 106;2007;340;152;etc 208;2008;32;12;etc;-((((
asevere
Messages postés
13095
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
23 novembre 2024
426
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
9 août 2009 à 14:57
9 août 2009 à 14:57
Ben pour moi, c'est une erreur dans la sortie exemple :) il a bien dit que ça devait être join sur code_art & campagne, en quel cas, la première ligne de l'exemple donné est fausse, puissque s'il s'agit bien du même article, les campagne ne sont pas les mêmes :)