Reunir 2 fichiers en un avec un script shell

Résolu/Fermé
mlkndiaye - 20 mai 2010 à 11:45
 mlkndiaye - 21 mai 2010 à 14:06
Bonjour,

j'ai 2 fichiers en entrées sous la forme:

fich1
654143|764|FACTURE NORD|LIVRE|
753282|627|RECEPTION DOUBLE|EXISTANT|
976376|897|ACION DEMANDER|RESERVER|

et fich2
654143|834Z7|
753282|D6735|
976376|76H76|

seullement la premiere colonne se resemble pour les deux fichiers.
JE VEUX AVOIR POUR RESULTAT UNE FICHIES fich3 DE LA FORME:

654143|764|FACTURE NORD|834Z7|LIVRE|
753282|627|RECEPTION DOUBLE|D6735|EXISTANT|
976376|897|ACION DEMANDER|76H76|RESERVER|

merci de m'aider pour concevoir ce script shell

A voir également:

5 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
20 mai 2010 à 11:59
Salut,

man join

$ cat fich1
654143|764|FACTURE NORD|LIVRE|
753282|627|RECEPTION DOUBLE|EXISTANT|
976376|897|ACION DEMANDER|RESERVER|

$ cat fich2
654143|834Z7|
753282|D6735|
976376|76H76|

$ join -t '|' -j1 1 -o '1.1 1.2 1.3 2.2 1.4' fich1 fich2
654143|764|FACTURE NORD|834Z7|LIVRE
753282|627|RECEPTION DOUBLE|D6735|EXISTANT
976376|897|ACION DEMANDER|76H76|RESERVER

$

;-))
0
merci de ta reactivité.
Mais je pense que c'est encore plus complexe:
je croix que je me suis mal exprimé

- le nombre de ligne des fichiers fich1 et fich2 varie
- il peux y avoir une ligne manquante sur l'une des deux fichiers, les lignes manquantes sur l'un ou l'autre fichier doit etre redirgé dans un fichier rejet fich4
- en fin fich3 resoit le resulte
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
20 mai 2010 à 15:52
hello
j'ai rajouté une ligne dans chaque fichier
$ cat a1
654143|764|FACTURE NORD|LIVRE|
753282|627|RECEPTION DOUBLE|EXISTANT|
976376|897|ACION DEMANDER|RESERVER|
00000|897|ACION DEMANDER|RESERVER|
$ 
$ cat a2
654143|834Z7|
753282|D6735|
976376|76H76|
99999|76H76|
$ 
$ awk 'BEGIN{FS=OFS="|"};NF<4 {x[$1]=$2;z[$1]=$0}; NF>4 {if(!x[$1]){print > "a4";next}; $3=$3 OFS x[$1];print;z[$1]=""};END{for(n in z)if(z[n])print z[n] > "a4"}' a2 a1
654143|764|FACTURE NORD|834Z7|LIVRE|
753282|627|RECEPTION DOUBLE|D6735|EXISTANT|
976376|897|ACION DEMANDER|76H76|RESERVER|
$ 
$ cat a4
00000|897|ACION DEMANDER|RESERVER|
99999|76H76|
$ 
0
merci c'est exactement ce que je cherche.
comme je m y connai pas awk , je veux apporter une modife sur le format du fichier:
cat a1
85884769370|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010|
08235367539|02900|Bassirou |DILLO|13081967|LOUGA|17052010|
98545784521|02000|Babacar |DOUMBIA|31121955|THIES|17052010|
53677448920|03500|Fatou |SILLA|27101965|COTE IVOIRE|17052010|
15566728777|01700|ALI |DIOP|29031975|MALI|17052010|
77992939257|00700|Bintou |NDIAYE|24041973|DAKAR|17052010|

cat 2
85884769370|030|
08235367539|050|
98545784521|051|
53677448920|060|
15566728777|070|
77992939257|071|

- Peut tu me modifier le script pour l'adapter?
- je oudrais recupere dans a4 le resultat qui s'affachie a l'ecran
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
21 mai 2010 à 07:37
pour ces 2 lignes, ou faut-il placer le 030 ?
85884769370|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010|
85884769370|030|

pour placer la sortie dans un fichier ajouter: en bout de ligne
awk ... > a3
0
je me suis troumpe,
- je oudrais recupere dans a3 le resultat qui s'affachie a l'ecran
0
bonjour dubcek,
je suis en attante merci d'avance.
0
just apres le primer |
cad: 85884769370|030|
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
21 mai 2010 à 11:44
$ awk 'BEGIN{FS=OFS="|"};NF<4 {x[$1]=$2;z[$1]=$0}; NF>4 {if(!x[$1]){print > "a4";next}; $2=x[$1] OFS $2;print;z[$1]=""};END{for(n in z)if(z[n])print z[n] > "a4"}' a2 a1 > a3
$ 
$ cat a3
85884769370|030|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010|
08235367539|050|02900|Bassirou |DILLO|13081967|LOUGA|17052010|
98545784521|051|02000|Babacar |DOUMBIA|31121955|THIES|17052010|
53677448920|060|03500|Fatou |SILLA|27101965|COTE IVOIRE|17052010|
15566728777|070|01700|ALI |DIOP|29031975|MALI|17052010|
77992939257|071|00700|Bintou |NDIAYE|24041973|DAKAR|17052010|
$
0
Encore merci pour tout ,
j'ai reusi a l'adapter et bonne journée
0