Posez votre question Signaler

[Unix korn shell] Convertir une liste [Résolu]

Karamurat 42Messages postés 12 juillet 2007Date d'inscription 4 janvier 2011Dernière intervention - Dernière réponse le 5 août 2007 à 07:52
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 !
Lire la suite 

[Unix korn shell] Convertir une liste »

31 réponses
Réponse
+1
moins plus
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 
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
;-))
Karamurat- 22 juil. 2007 à 10:29
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 !
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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

jipicy- 22 juil. 2007 à 11:15
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
;-))
Ajouter un commentaire
Réponse
+0
moins plus
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" ;-((
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
Tu ne veux que les lignes ayant un "fromComp toComp", ou bien toutes les lignes aussi comme dans ton 1er post ???
Karamurat- 22 juil. 2007 à 13:35
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
Ajouter un commentaire
Réponse
+0
moins plus
Et le critère de numérotation s'appuie sur quelle référence ? (01, 02, 03, etc.)
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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)
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
remplacer ++comp - 1 par x=++comp - 1 ? x : ""
Karamurat- 22 juil. 2007 à 16:00
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 .
dubcek- 22 juil. 2007 à 16:22
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} ;
Karamurat- 23 juil. 2007 à 07:06
bonjour

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

merci d'avance
Ajouter un commentaire
Réponse
+0
moins plus
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 ?
jipicy- 29 juil. 2007 à 14:23
Salut,

Euh...! j'ai pas tout compris là :-\
Tu peux développer un peu s'il te plaît ?
Ajouter un commentaire
Réponse
+0
moins plus
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,"    !","~~~~~~~~~~~~~~~",
Ajouter un commentaire
Réponse
+0
moins plus
Une petite aide serait la bienvenue , please
Ajouter un commentaire
Réponse
+0
moins plus
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 ;-(
Karamurat- 31 juil. 2007 à 07:56
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 ...
Ajouter un commentaire
Réponse
+0
moins plus
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 ...
Ajouter un commentaire
Réponse
+0
moins plus
On peut définir plusieur séparateurs dans awk : awk -F"[ ;]"
<espace> et ; sont séparateurs.
jipicy- 1 août 2007 à 08:55
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 ;-))
Karamurat- 1 août 2007 à 14:28
bon 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 ,
Ajouter un commentaire
Ce document intitulé « [Unix korn shell] Convertir une liste » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?
[Unix korn shell] Convertir une liste - page 2