Reunir 2 fichiers en un avec un script shell

Résolu
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

5 réponses

  1. Modérateur
    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
    1. 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
      1. Contributeur
        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
        1. 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
        2. Contributeur
          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
      2. je me suis troumpe,
        - je oudrais recupere dans a3 le resultat qui s'affachie a l'ecran
        0
        1. bonjour dubcek,
          je suis en attante merci d'avance.
          0
        2. just apres le primer |
          cad: 85884769370|030|
          0
      3. Contributeur
        $ 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
        1. Encore merci pour tout ,
          j'ai reusi a l'adapter et bonne journée
          0

      Discussions similaires

      question pix mot caché

      7 réponses