IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Les tableaux sous 'awk'


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Par défaut Les tableaux sous 'awk'
    Bonjour,

    Au-dessous, voici un ensemble d’enregistrements sous forme de fichier ‘LISTE’ (*.lst) dont je voudrais
    qu’il soit chargé dans un programme ‘*.sh’ sous forme de tableau à deux dimensions. L'entête du script est : !/bin/ksh.
    Les champs sont séparés par le caractère : ~ (Tilde).
    Par la suite, je veux pouvoir comparer chaque élément du tableau.
    J’ai vu que cela est possible avec le processeur de texte ‘awk’.
    Par exemple :
    NB_ENREG=`cat $FICHIER_LISTE | cut -c 1 | grep -v \# | wc -l | tr -d " "` <-- Cette instruction est correcte.
    TABLEAU=`awk 'tab[$NB_ENREG,5]'` <-- Cette instruction est incorrecte.

    Questions :
    Comment définir ce tableau à deux dimension ?
    Comment charger le tableau en tenant compte du séparateur de champ ?
    Comment écrire la boucle pour la comparaison des éléments du tableau ?

    Après plusieurs essais, le souci rencontrer provient de la syntaxe des commandes.
    Pouvez-vous m’apporter la solution dans le cas présent ?

    D’avance merci pour votre aide.

    Cordiales salutations.

    PS : Je ne sais pas si c'est une excuse valable, mais je viens du monde Windows et je débute dans l'environnement UNIX. Pour l'instant je galère...

    Ci-dessous le fichier :
    -------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
      ~N1DEC.AZ.EM0PS12.ECHANGE1.L1DJOBA3~x1DJOBA3~L~CONT~CEBN
      ~B1DEC.AZ.EM0PS12.ECHANGE1.B1DJOBA3~x1DJOBA3~B~CONT~CEB
      ~D1DEC.AZ.EM0PS12.ECHANGE1.E1DJOBA3~x1DJOBA3~E~CONT~CEAN
      ~D1DEC.AZ.EM0PS12.ECHANGE1.F1DJOBA3~x1DJOBA3~F~CONT~CEPA
      ~C1DEC.AZ.EM0PS12.ECHANGE1.C1DJOBA3~x1DJOBA3~C~CONT~CEIDFP
      ~N1DEC.AZ.EM0PS12.ECHANGE1.H1DJOBA3~x1DJOBA3~H~CONT~CEHN
      ~D1DEC.AZ.EM0PS12.ECHANGE1.G1DJOBA3~x1DJOBA3~G~CONT~CEPC
      ~N1DEC.AZ.EM0PS29.ECHANGE1.L1DJOD09~x1DJOD09~L~PTRM_IMMB~CEBN
      ~B1DEC.AZ.EM0PS29.ECHANGE1.B1DJOD09~x1DJOD09~B~PTRM_IMMB~CEB
      ~D1DEC.AZ.EM0PS29.ECHANGE1.E1DJOD09~x1DJOD09~E~PTRM_IMMB~CEAN
      ~D1DEC.AZ.EM0PS29.ECHANGE1.F1DJOD09~x1DJOD09~F~PTRM_IMMB~CEPA
      ~C1DEC.AZ.EM0PS29.ECHANGE1.C1DJOD09~x1DJOD09~C~PTRM_IMMB~CEIDFP
      ~N1DEC.AZ.EM0PS29.ECHANGE1.H1DJOD09~x1DJOD09~H~PTRM_IMMB~CEHN
      ~D1DEC.AZ.EM0PS29.ECHANGE1.G1DJOD09~x1DJOD09~G~PTRM_IMMB~CEPC
      ~C11425.JdOR015RachRetrtAssrCnp003.dat~AssrCnp003~L~RACH_RETRT_ASSR_CNP~CEBN
      ~C12225.JdOR015RachRetrtAssrCnp003.dat~AssrCnp003~B~RACH_RETRT_ASSR_CNP~CEB
      ~C13335.JdOR015RachRetrtAssrCnp003.dat~AssrCnp003~E~RACH_RETRT_ASSR_CNP~CEAN
      ~C16485.JdOR015RachRetrtAssrCnp003.dat~AssrCnp003~F~RACH_RETRT_ASSR_CNP~CEPA
      ~C17515.JdOR015RachRetrtAssrCnp003.dat~AssrCnp003~C~RACH_RETRT_ASSR_CNP~CEIDFP
      ~C17695.JdOR015RachRetrtAssrCnp003.dat~AssrCnp003~H~RACH_RETRT_ASSR_CNP~CEHN
      ~C18645.JdOR015RachRetrtAssrCnp003.dat~AssrCnp003~G~RACH_RETRT_ASSR_CNP~CEPC
      ~L1DEC.AZ.EM0PSC1.ECHANGE1.L1DJOMCM~x1DJOMCM~L~PROC~CEBN
      ~B1DEC.AZ.EM0PSC1.ECHANGE1.B1DJOMCM~x1DJOMCM~B~PROC~CEB
      ~E1DEC.AZ.EM0PSC1.ECHANGE1.E1DJOMCM~x1DJOMCM~E~PROC~CEAN
      ~F1DEC.AZ.EM0PSC1.ECHANGE1.F1DJOMCM~x1DJOMCM~F~PROC~CEPA
      ~C1DEC.AZ.EM0PSC1.ECHANGE1.C1DJOMCM~x1DJOMCM~C~PROC~CEIDFP
      ~H1DEC.AZ.EM0PSC1.ECHANGE1.H1DJOMCM~x1DJOMCM~H~PROC~CEHN
      ~G1DEC.AZ.EM0PSC1.ECHANGE1.G1DJOMCM~x1DJOMCM~G~PROC~CEPC
      ~N1DEC.AZ.EM0PS94.ECHANGE1.L1DJOPA5~x1DJOPA5~L~CONV_FUSN_CPTE~CEBN
      ~B1DEC.AZ.EM0PS94.ECHANGE1.B1DJOPA5~x1DJOPA5~B~CONV_FUSN_CPTE~CEB
      ~D1DEC.AZ.EM0PS94.ECHANGE1.E1DJOPA5~x1DJOPA5~E~CONV_FUSN_CPTE~CEAN
      ~D1DEC.AZ.EM0PS94.ECHANGE1.F1DJOPA5~x1DJOPA5~F~CONV_FUSN_CPTE~CEPA
      ~C1DEC.AZ.EM0PS94.ECHANGE1.C1DJOPA5~x1DJOPA5~C~CONV_FUSN_CPTE~CEIDFP
      ~N1DEC.AZ.EM0PS94.ECHANGE1.H1DJOPA5~x1DJOPA5~H~CONV_FUSN_CPTE~CEHN

  2. #2
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    Chrgt de ton fichier dans un tableau à 2 dimensions

    Sites utiles :
    http://www.shellunix.com/awk.html
    http://lea-linux.org/cached/index/Dev-awk.html


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    awk -F"~" '
    {
    	if (NR == 1 || NR == 10) {
    		print "* pour contrôle, affichage du 1er et du 10ème enreg traité : "
    		print "* enreg "NR". "NF " champs présents : "
    	}
    	for (IndChamp=1 ; IndChamp <= NF ; IndChamp++) {
    		TabPoste[NR,IndChamp]=$IndChamp
     
    		if (NR == 1 || NR == 10) {
    			print "* champ["NR","IndChamp"] : "TabPoste[NR,IndChamp]
    		}
    	}
    }
    END {
    	print "* FIN traitement : "NR" enreg. lus "
    } ' LISTE.lst

    Rapport d'exécution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    * pour contrôle, affichage du 1er et du 10ème enreg traité : 
    * enreg 1. 6 champs présents : 
    * champ[1,1] : 
    * champ[1,2] : N1DEC.AZ.EM0PS12.ECHANGE1.L1DJOBA3
    * champ[1,3] : x1DJOBA3
    * champ[1,4] : L
    * champ[1,5] : CONT
    * champ[1,6] : CEBN
    * pour contrôle, affichage du 1er et du 10ème enreg traité : 
    * enreg 10. 6 champs présents : 
    * champ[10,1] : 
    * champ[10,2] : D1DEC.AZ.EM0PS29.ECHANGE1.E1DJOD09
    * champ[10,3] : x1DJOD09
    * champ[10,4] : E
    * champ[10,5] : PTRM_IMMB
    * champ[10,6] : CEAN
    * FIN traitement : 34 enreg. lus

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Par défaut Remerciements...
    A l'attention de 'BlaireauOne'.

    Bonsoir,

    Je tiens à vous remercier pour la solution que vous m'avez fournie
    quant à la possibilité d'utiliser des tableaux à deux dimensions sous 'awk'
    en environnement 'UNIX'.
    Elle est pleinement satisfaisante.
    Je l'utilise donc...
    A bientôt et encore merci.

    JBM-33.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Les tableaux sous VBA access
    Par comewithme dans le forum IHM
    Réponses: 8
    Dernier message: 04/04/2014, 23h57
  2. Inverser les colonnes sous awk
    Par sab113 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 17/06/2013, 00h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo