[Unix korn shell] Convertir une liste

Résolu
bonjour

j'ai besoin de votre aide pour convertir cette liste (fichier d'entrer ) :

INPUT
Input file comp.txt
lawsonlevel: NO

lawsoncompanyI: 2028
lawsoncompanyI: 2030
lawsoncompanyF: 2079
lawsoncompanyF: 2100
lawsoncompanyF: 2161
lawsoncompanyF: 2237
lawsoncompanyF: 2307
lawsoncompanyF: 2334
lawsoncompanyF: 2340
lawsoncompanyF: 2368
lawsoncompanyF: 2369
lawsoncompanyF: 3526
lawsoncompanyF: 4000
lawsoncompanyF: 4001
lawsoncompanyF: 4002
lawsoncompanyF: 4003
lawsoncompanyF: 4008
lawsoncompanyF: 4009
lawsoncompanyF: 4010
lawsoncompanyF: 4011
lawsoncompanyF: 4012
lawsoncompanyF: 4016
lawsoncompanyF: 4056

avec les parametres d'entrer :

ROLE=TAXMNG

DB=LOP1

MODULE=AP

LEVEL=NO

fussionner le tout pour pouvoir avoir un fichier de sortie de cette nature la :

avec la description des colonnes :

${ROLE}-${LEVEL} ${DB} ${MODULE} =99 Comp Comp fixed fixed =1 if Full

pour pouvoir avoir ça :

"TAXMNG-NO","LOP1","AP",99,2028,2028," !","~~~~~~~~~~~~~~~",1
"TAXMNG-NO","LOP1","AP",99,2030,2030," !","~~~~~~~~~~~~~~~",
"TAXMNG-NO","LOP1","AP",99,2079,2079," !","~~~~~~~~~~~~~~~",1

le tout avec la commande awk si possible ,

Merci encore a tous !
Configuration: Windows XP
Firefox 2.0.0.5

21 réponses

  • Votes
  • Date
  • Date décroissante
Résumé de la discussion

Le fil porte sur la conversion d'une liste d'entrée en un fichier de sortie structuré via awk, en combinant des paramètres ROLE, DB, MODULE et LEVEL pour chaque entrée. Plusieurs propositions montrent un script awk utilisant MODULE_LIST et des tests sur law.*I et law.*F pour déterminer full et produire les lignes formatées, avec les champs ROLE-LEVEL, DB, MODULE, 99 et les valeurs. En pratique, des exemples résument notamment la gestion des numéros et des plages (ex. 46-47 ou 1708), ainsi que les ajustements sur l'incrémentation et l'affichage des séparateurs. Des échanges ultérieurs envisagent aussi des approches alternatives, par exemple en ksh sans awk et des solutions utilisant match, pour mieux traiter les cas de séparateurs et améliorer la portabilité.

Bobot (l’IA à votre service)
  1. Contributeur
    Voila:

    MODULE_LIST="AM AP AR BL"
    
    for MODULE in $MODULE_LIST
    do
    awk -F " " ' 
     BEGIN{comp=0} ;
    
    /^law.*I/ {full="" } # Inquiry access
    
    /^law.*F/ {full="1"} # Full access
    
    /^lawson.*: .*[0-9][0-9]*$/ {
    x=++comp - 1 ; if(x) s=sprintf("%d",x) else s="";
    printf("\"%s-%s\",\"%s\",\"%s\",%s,%s,%s,\" !\",\"~~~~~~~~~~~
    ~~~~\",%s\n",
    ROLE, LEVEL, DB, MODULE,s , substr($2,1,4),substr($2,length($2) - 3
    ,4), full)}
    
    ' ROLE=TAXMNG LEVEL=NO DB=LOP1 MODULE=$MODULE < comp_4.txt
    done 
    1. Merci encore a dubcek et jipicy ;)

      voici la version finale :

      MODULE_LIST="AM AP AR BL"

      for MODULE in $MODULE_LIST
      do
      awk -F " " '
      BEGIN{comp=0}

      /^law.*I/ {full="" } # Inquiry access

      /^law.*F/ {full="1"} # Full access

      /^lawson.*: .*[0-9][0-9]*$/{
      x=++comp - 1
      if(x) s=sprintf("%d",x)
      else s=""

      printf("\"%s-%s\",\"%s\",\"%s\",%s,%s,%s,\" !\",\"~~~~~~~~~~~~~~~\",%
      s\n",
      ROLE, LEVEL, DB, MODULE, s, substr($2,1,4),substr($2,length($2) - 3,4),
      full)}

      ' ROLE=TAXMNG LEVEL=NO DB=LOP1 MODULE=$MODULE < comp_4.txt
      done
      1. Modérateur
        Salut,

        C'est pas très clair ton histoire...
        Les variables sont fournies en paramètres au script ? Ou elles doivent être codées en dur dans le script ?
        Le fichier d'entrée a-t-il toujours les 3 premières lignes de présentation ?
        Je suppose que la clause incluant le "1" en fin de ligne c'est le "F" de "lawsoncompanyF" ?

        Voilà déjà une ébauche en pur ksh (désolé pas de "awk" dans cette solution et testé sur une liste ne comprenant pas les 3 lignes d'en-tête) :
        #! /bin/ksh
        
        ROLE=TAXMNG
        DB=LOP1
        MODULE=AP
        LEVEL=NO
        
        while read line
        do
        if [ $(expr ${line%:*} : '.*\(.\)') = "F" ]
        then
        echo "\"${ROLE}-${LEVEL}\",\"${DB}\",\"${MODULE}\",99,${line#*: },${line#*: },\" !\",\"~~~~~~~~~~~~~~~\",1"
        else
        echo "\"${ROLE}-${LEVEL}\",\"${DB}\",\"${MODULE}\",99,${line#*: },${line#*: },\" !\",\"~~~~~~~~~~~~~~~\","
        fi
        done < fichier_d_entree
        ;-))
        1. Bonjour

          et encore merci , tu est vraiment formidable ,
          pour répondre a tes question

          <quote>Le fichier d'entrée a-t-il toujours les 3 premières lignes de présentation ? </quote>
          non, c'est uniquement pour présenter la chose .

          <quote>Je suppose que la clause incluant le "1" en fin de ligne c'est le "F" de "lawsoncompanyF"</quote>
          c'est tout a fait ça, 1 qund c'est lawsoncompanyF et "blanc" quand c'est lawsoncompanyl

          voila
          je te remercie d'avance !
      2. Contributeur
        Hi
        C'est du COBOL ?
        Quel est le critère du 1 final ? le F comme suppose jipicy, mais 2028 a un I ?

        awk -F: '/^lawson/ {printf("\"%s-%s\",\"%s\",\"%s\",99,%s,%s,\" !\",\"~~~~~~~~~~~~~~~\",1", 
            ROLE, LEVEL, DB, MODULE, $2, $2)}' ROLE=TAXMNG LEVEL=NO DB=LOP1 MODULE=AP  < input.txt
        
        1. Contributeur
          je corrige
          awk -F: '/^law.*I/ {full="" } ; /^law.*F/ {full="1"} ; /^lawson/ {printf("\"%s-%s\",\"%s\",\"%s\",99,%s,%s,\" !\",\"~~~~~~~~~~~~~~~\",%s", 
              ROLE, LEVEL, DB, MODULE, $2, $2, full)}' ROLE=TAXMNG LEVEL=NO DB=LOP1 MODULE=AP  < input.txt
          
          
          1. Modérateur
            Superbe ;-))

            Mais si je peux me permettre...
            awk -F: '/^law.*I/ {full="" } ; /^law.*F/ {full="1"} ; /^lawson.*[0-9][0-9]*$/ {printf("\"%s-%s\",\"%s\",\"%s\",99,%s,%s,\" !\",\"~~~~~~~~~~~~~~~\",%s\n",
                ROLE, LEVEL, DB, MODULE, $2, $2, full)}' ROLE=TAXMNG LEVEL=NO DB=LOP1 MODULE=AP  < input.txt
            ;-))
        2. Modérateur
          pfffffffffffff que je suis c*n, pour le ".*[0-9][0-9]*$", j'avais omis la réponse de "Karamurat," et pas vu qu'il n'y avait pas les 3 premières lignes dans le fichier, toutes mes excuses "dubcek" ;-((
          1. Hi
            C'est du COBOL ?
            Quel est le critère du 1 final ? le F comme suppose jipicy, mais 2028 a un I ? 


            Oups je n'avais pas vue mais il n'y pas de 1

            donc sa donne :
            "TAXMNG-NO","LOP1","AP",99,2028,2028," !","~~~~~~~~~~~~~~~",

            revenons au problème, je vais un peu corser la chose (j'ai essayer a plusieur reprise mais tjs pas réussie) est-il possible de remplacer 99 par les n° de séquence c'est a dire 1 , 2 , 3 etc..

            et de remplacer la cologne "comp" te tel sorte que si j'ai un fichier d'entrer avec plusieur compagnie soit

            par exemple :

            lawsoncompanyI: 2028-2029
            lawsoncompanyI: 2030-2069
            lawsoncompanyF: 2079
            lawsoncompanyF: 2100
            lawsoncompanyF: 2161
            lawsoncompanyF: 2237
            lawsoncompanyF: 2307
            lawsoncompanyF: 2334
            lawsoncompanyF: 2340
            lawsoncompanyF: 2368
            lawsoncompanyF: 2369-3045
            lawsoncompanyF: 3526
            lawsoncompanyF: 4000
            lawsoncompanyF: 4001
            lawsoncompanyF: 4002
            lawsoncompanyF: 4003
            lawsoncompanyF: 4008
            lawsoncompanyF: 4009
            lawsoncompanyF: 4010
            lawsoncompanyF: 4011
            lawsoncompanyF: 4012-4015
            lawsoncompanyF: 4016
            lawsoncompanyF: 4056

            et de le reformater en cette liste :

            avec la description des colonnes :

            ${ROLE}-${LEVEL} ${DB} ${MODULE} =N°de sequence fromComp toComp fixed fixed =1 if Full

            pour pouvoir avoir ça :

            "TAXMNG-NO","LOP1","AP",01,4012,4015," !","~~~~~~~~~~~~~~~",1
            "TAXMNG-NO","LOP1","AP",02,2369,3045," !","~~~~~~~~~~~~~~~",1
            "TAXMNG-NO","LOP1","AP",03,2079,2079," !","~~~~~~~~~~~~~~~",1
            etc...

            Merci encore
            1. Modérateur
              Tu ne veux que les lignes ayant un "fromComp toComp", ou bien toutes les lignes aussi comme dans ton 1er post ???
              1. toute les lignes comme dans le premier post ,oui,

                exemple:

                "TAXMNG-NO","LOP1","AP",01,4012,4015," !","~~~~~~~~~~~~~~~",1

                ---> correspont à lawsoncompanyF: 4012-4015

                "TAXMNG-NO","LOP1","AP",02,2369,3045," !","~~~~~~~~~~~~~~~",1

                ---> correspont à lawsoncompanyF: 2369-3045

                "TAXMNG-NO","LOP1","AP",03,2079,2079," !","~~~~~~~~~~~~~~~",1

                ---> correspont à lawsoncompanyF: 2079-2079

                etc ...

                merci
            2. Modérateur
              Et le critère de numérotation s'appuie sur quelle référence ? (01, 02, 03, etc.)
              1. Contributeur
                En remplacant le 99 par %02d et en ajoutant comp++ après MODULE, tu auras un compteur sur 2 caractères 01,02,03, etc
                1. Et le critère de numérotation s'appuie sur quelle référence ? (01, 02, 03, etc.)


                  le critère de numérotation s'appuie sur les lignes (par classement)
                  1. donc voici ce que j'ai concocter grâce au précieuse aides que m'avez vous fournis ,j'ai un peu arranger et rajouter des choses :

                    MODULE_LIST="AM AP AR BL"

                    for MODULE in $MODULE_LIST
                    do
                    awk -F " " '

                    /^law.*I/ {full="" } # Inquiry access

                    /^law.*F/ {full="1"} # Full access

                    /^lawson.*: .*[0-9][0-9]*$/ {
                    printf("\"%s-%s\",\"%s\",\"%s\",%s,%s,%s,\" !\",\"~~~~~~~~~~~
                    ~~~~\",%s\n",
                    ROLE, LEVEL, DB, MODULE, ++comp - 1, substr($2,1,4),substr($2,length($2) - 3
                    ,4), full)}

                    ' ROLE=TAXMNG LEVEL=NO DB=LOP1 MODULE=$MODULE < comp_4.txt
                    done
                    1. bon j'ai un autre probleme

                      je veux que quand il liste (0,1,2,3,etc...) lorsque qu'il numérote les lignes le "0" soit nul c'est a dire que le "0" ne s'affiche pas a l'écran

                      je veux passer de ça :

                      "TAXMNG-NO","LOP1","AR",0,2028,2028," !","~~~~~~~~~~~~~~~",
                      "TAXMNG-NO","LOP1","AR",1,2030,2030," !","~~~~~~~~~~~~~~~",
                      "TAXMNG-NO","LOP1","AR",2,2079,2079," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",3,2100,2110," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",4,2161,2161," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",5,2237,2237," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",6,2307,2307," !","~~~~~~~~~~~~~~~",
                      "TAXMNG-NO","LOP1","AR",7,2334,2334," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",8,2340,2340," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",9,2368,2368," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",10,2369,2369," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",11,3526,3526," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",12,4000,4003," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",13,4008,4012," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",14,4016,4016," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",15,4056,4069," !","~~~~~~~~~~~~~~~",1

                      à ça :

                      "TAXMNG-NO","LOP1","AR",,2028,2028," !","~~~~~~~~~~~~~~~",
                      "TAXMNG-NO","LOP1","AR",1,2030,2030," !","~~~~~~~~~~~~~~~",
                      "TAXMNG-NO","LOP1","AR",2,2079,2079," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",3,2100,2110," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",4,2161,2161," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",5,2237,2237," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",6,2307,2307," !","~~~~~~~~~~~~~~~",
                      "TAXMNG-NO","LOP1","AR",7,2334,2334," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",8,2340,2340," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",9,2368,2368," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",10,2369,2369," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",11,3526,3526," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",12,4000,4003," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",13,4008,4012," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",14,4016,4016," !","~~~~~~~~~~~~~~~",1
                      "TAXMNG-NO","LOP1","AR",15,4056,4069," !","~~~~~~~~~~~~~~~",1

                      merci d'avance
                      1. Contributeur
                        remplacer ++comp - 1 par x=++comp - 1 ? x : ""
                        1. après avoir remplacer ++comp - 1 par x=++comp - 1 ? x : ""

                          j'ai eu ça :

                          "TAXMNG-NO","LOP1","AR",,2028,2028," !","~~~~~~~~~~~~~~~",
                          "TAXMNG-NO","LOP1","AR",,2030,2030," !","~~~~~~~~~~~~~~~",
                          "TAXMNG-NO","LOP1","AR",,2079,2079," !","~~~~~~~~~~~~~~~",1
                          "TAXMNG-NO","LOP1","AR",,2100,2110," !","~~~~~~~~~~~~~~~",1
                          "TAXMNG-NO","LOP1","AR",,2161,2161," !","~~~~~~~~~~~~~~~",1
                          "TAXMNG-NO","LOP1","AR",,2237,2237," !","~~~~~~~~~~~~~~~",1
                          "TAXMNG-NO","LOP1","AR",,2307,2307," !","~~~~~~~~~~~~~~~",
                          "TAXMNG-NO","LOP1","AR",,2334,2334," !","~~~~~~~~~~~~~~~",1
                          "TAXMNG-NO","LOP1","AR",,2340,2340," !","~~~~~~~~~~~~~~~",1
                          "TAXMNG-NO","LOP1","AR",,2368,2368," !","~~~~~~~~~~~~~~~",1
                          "TAXMNG-NO","LOP1","AR",,2369,2369," !","~~~~~~~~~~~~~~~",1
                          "TAXMNG-NO","LOP1","AR",,3526,3526," !","~~~~~~~~~~~~~~~",1
                          "TAXMNG-NO","LOP1","AR",,4000,4003," !","~~~~~~~~~~~~~~~",1
                          "TAXMNG-NO","LOP1","AR",,4008,4012," !","~~~~~~~~~~~~~~~",1
                          "TAXMNG-NO","LOP1","AR",,4016,4016," !","~~~~~~~~~~~~~~~",1
                          "TAXMNG-NO","LOP1","AR",,4056,4069," !","~~~~~~~~~~~~~~~",1

                          a moins que j'ai du faire une erreur , ça ne fct pas .
                        2. Contributeur
                          Avant le printf:
                          x=++comp - 1 ; if(x) s=sprintf("%d",x) else s="";
                          

                          et dans le printf remplacer ++comp - 1 par s

                          ceci dit, ++comp -1 == comp++
                          pour faire propre mettre au début BEGIN{comp=0} ;
                        3. @dubcekbonjour

                          Peut tu faire le changement directement dans le script car je n'ai pas réussi (débutant ),

                          merci d'avance
                      2. je constate un ptit probleme , donc voila j'ai une liste d'entrer comme ceci :

                        lawsoncompanyF: 2
                        lawsoncompanyF: 4-5
                        lawsoncompanyF: 7-9
                        lawsoncompanyF: 12
                        lawsoncompanyF: 15-18
                        lawsoncompanyF: 20
                        lawsoncompanyF: 23-24
                        lawsoncompanyF: 29
                        lawsoncompanyF: 32-34
                        lawsoncompanyF: 38
                        lawsoncompanyF: 41
                        lawsoncompanyF: 43-44
                        lawsoncompanyF: 46-47
                        


                        et j'ai ça:
                        "TAXMNG-NO","LOP1","AM",,2,2,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",1,4-5,4-5,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",2,7-9,7-9,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",3,12,12,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",4,15-1,5-18,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",5,20,20,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",6,23-2,3-24,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",7,29,29,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",8,32-3,2-34,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",9,38,38,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",10,41,41,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",11,43-4,3-44,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",12,46-4,6-47,"    !","~~~~~~~~~~~~~~~",1
                        


                        comment faire pour faire apparaitre le tiret "-" comme séparateur ?
                        Auriez vous une solution ?
                        1. Modérateur
                          Salut,

                          Euh...! j'ai pas tout compris là :-\
                          Tu peux développer un peu s'il te plaît ?
                      3. Oui donc j'aurais voulue avoir une liste de sortie de cette sorte :
                        "TAXMNG-NO","LOP1","AM",,2,2,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",1,4,5,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",2,7,9,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",3,12,12,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",4,15,18,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",5,20,20,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",6,23,24,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",7,29,29,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",8,32,34,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",9,38,38,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",10,41,41,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",11,43,44,"    !","~~~~~~~~~~~~~~~",1
                        "TAXMNG-NO","LOP1","AM",12,46,47,"    !","~~~~~~~~~~~~~~~",1
                        


                        et non pas comme celle d'en haut ,

                        c'est à dire si j'ai ça (liste d'entrer) :
                        lawsoncompanyF: 46-47
                        

                        alors j'ai ça - liste sortie :
                        "TAXMNG-NO","LOP1","AM",12,46-4,6-47,"    !","~~~~~~~~~~~~~~~",1
                        

                        au lieu de ça :
                        "TAXMNG-NO","LOP1","AM",12,46,47,"    !","~~~~~~~~~~~~~~~",1
                        


                        cela fonctionne pour les nombres a 4 chiffres :
                        liste d'entrer :
                        lawsoncompanyI: 1708
                        lawsoncompanyI: 1996
                        lawsoncompanyI: 1998-1999
                        


                        liste de sortie :
                        "TAXMNG-NO","LOP1","BL",65,1708,1708,"    !","~~~~~~~~~~~~~~~",
                        "TAXMNG-NO","LOP1","BL",66,1996,1996,"    !","~~~~~~~~~~~~~~~",
                        "TAXMNG-NO","LOP1","BL",67,1998,1999,"    !","~~~~~~~~~~~~~~~",
                        
                        1. Modérateur
                          J'ai passé une bonne partie de l'après-midi d'hier à essayer avec la fonction "split" de "awk" sans succès ;-(

                          Faudrait essayer de traiter le cas dans la boucle (avec "sed" par exemple) avant le traitement par "awk", récupérer la mise en forme dans une variable et l'injecter dans le "printf"...

                          Bon là je pars bosser, pas le temps de voir ça ;-(
                          1. Hmm..

                            Merci beaucoup pour avoir investit du temps pour mon cas ...,de plus Comment aurai je pût en arriver la sans votre aide ?
                            pourrai tu m'éclaircir d'avantage sur se "sed" ,car j'ai galèrer toute la journée hier et avant hier ... je commence a ne plus avoir d'espoir ...

                            en attendant une réponse positif ...
                        2. je crois que c'est peut etre possible avec "match" de "awk", mais j'aurais besoin d'un coup de pouce !

                          si je prend le tiret
                          -
                          comme séparateur ,tous devrais ce régler ...
                          1. Contributeur
                            On peut définir plusieur séparateurs dans awk : awk -F"[ ;]"
                            <espace> et ; sont séparateurs.
                            1. Modérateur
                              Salut dubcek,

                              Par contre est-il possible de redéfinir la variable "FS" le temps de définir une variable sur un test, du genre :
                              awk -F " " '
                              
                              $2 ~ /-/ { FS="-"; var=$1","$2 }
                              
                              { print var }
                              ' < fichier
                              L'exemple ci-dessus ne marche pas ;-(
                              Je pensais inclure un truc du genre dans ton script afin d'assigner directement la valeur avec virgule à une variable et l'inclure dans le "printf" final...

                              Merci d'avance ;-))
                            2. @jipicybon j'ai réussi avec "match" de "awk" pour la deuxieme cologne de compagnie se qui donne comme script :

                              MODULE_LIST="AM AP AR BL"
                              
                              for MODULE in $MODULE_LIST
                              do
                              awk -F " " '
                              BEGIN{comp=0}
                              
                               /^law.*I/ {full="" }  # Inquiry access
                              
                               /^law.*F/ {full="1"}  # Full access
                              
                               /^lawson.*: .*[0-9][0-9]*$/{
                                      x=++comp - 1
                                      if(x) s=sprintf("%d",x)
                                      else s=""
                              
                                      printf("\"%s-%s\",\"%s\",\"%s\",%s,%s,%s,\"    !\",\"~~~~~~~~~~~~~~~\",%s\n",
                                      ROLE, LEVEL, DB, MODULE, s, substr($2,1,match($2,"-")-1),substr($2,match($2,"-")+1,4), full)}
                              
                              
                                    ' ROLE=TAXMNG LEVEL=NO DB=LOP1 MODULE=$MODULE  < comp_4.txt
                              done
                              

                              si j'ai ça :
                              lawsoncompanyF: 2
                              lawsoncompanyF: 4-5
                              lawsoncompanyF: 7-9
                              lawsoncompanyF: 12
                              lawsoncompanyF: 15-18
                              lawsoncompanyF: 20
                              lawsoncompanyF: 23-24
                              lawsoncompanyF: 29
                              lawsoncompanyF: 32-34
                              lawsoncompanyF: 38
                              lawsoncompanyF: 41
                              lawsoncompanyF: 43-44
                              lawsoncompanyF: 4666-4766
                              

                              et donc j'ai ça :
                              "TAXMNG-NO","LOP1","AM",,,2,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",1,4,5,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",2,7,9,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",3,,12,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",4,15,18,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",5,,20,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",6,23,24,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",7,,29,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",8,32,34,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",9,,38,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",10,,41,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",11,43,44,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",12,4666,4766,"    !","~~~~~~~~~~~~~~~",1
                              


                              mais je n'arrive pas a afficher le reste des compagnie (pour la premier cologne) pour les compagnie ne comportant pas de tiret comme pour la compagnie 2 alors que ça fonctionne pour la compagnie 43-44 par ex.

                              c'est a dire comme ceci :

                              "TAXMNG-NO","LOP1","AM",,2,2,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",1,4,5,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",2,7,9,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",3,12,12,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",4,15,18,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",5,20,20,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",6,23,24,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",7,29,29,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",8,32,34,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",9,38,38,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",10,41,41,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",11,43,44,"    !","~~~~~~~~~~~~~~~",1
                              "TAXMNG-NO","LOP1","AM",12,4666,4766,"    !","~~~~~~~~~~~~~~~",1


                              merci d'avance ,
                          • 1
                          • 2