[Unix korn shell] Convertir une liste

Résolu/Fermé
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 - 22 juil. 2007 à 08:30
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 - 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 !
A voir également:

21 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
23 juil. 2007 à 09:31
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
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 2
23 juil. 2007 à 10:07
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
22 juil. 2007 à 10:12
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
;-))
0
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 2
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 !
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
22 juil. 2007 à 10:55
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
0

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

Posez votre question
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
22 juil. 2007 à 11:10
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

0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
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
;-))
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
22 juil. 2007 à 11:18
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" ;-((
0
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 2
22 juil. 2007 à 12:20
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
22 juil. 2007 à 13:21
Tu ne veux que les lignes ayant un "fromComp toComp", ou bien toutes les lignes aussi comme dans ton 1er post ???
0
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 2
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
22 juil. 2007 à 13:41
Et le critère de numérotation s'appuie sur quelle référence ? (01, 02, 03, etc.)
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
22 juil. 2007 à 13:56
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
0
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 2
22 juil. 2007 à 14:24
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)
0
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 2
22 juil. 2007 à 14:53
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
0
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 2
22 juil. 2007 à 15:45
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
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
22 juil. 2007 à 15:54
remplacer ++comp - 1 par x=++comp - 1 ? x : ""
0
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 2
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 .
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
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} ;
0
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 2 > dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024
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
0
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 2
29 juil. 2007 à 13:59
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 ?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
29 juil. 2007 à 14:23
Salut,

Euh...! j'ai pas tout compris là :-\
Tu peux développer un peu s'il te plaît ?
0
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 2
29 juil. 2007 à 14:56
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,"    !","~~~~~~~~~~~~~~~",
0
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 2
30 juil. 2007 à 07:52
Une petite aide serait la bienvenue , please
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
30 juil. 2007 à 08:00
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 ;-(
0
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 2
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 ...
0
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 2
31 juil. 2007 à 10:11
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 ...
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
31 juil. 2007 à 16:01
On peut définir plusieur séparateurs dans awk : awk -F"[ ;]"
<espace> et ; sont séparateurs.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
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 ;-))
0
Karamurat Messages postés 43 Date d'inscription jeudi 12 juillet 2007 Statut Membre Dernière intervention 4 janvier 2011 2 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
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 ,
0