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 :

Crée un décompactage


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Par défaut Crée un décompactage
    Bonjour

    Quel serait la commande la plus simple possible mais qui reste aussi la plus fiable de décompacter cette liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    lawsoncompanyF: 4010-4020
    lawsoncompanyF: XR: 3010-3012
    lawsoncompanyF: 4050-4052
    lawsoncompanyF: 4069
    lawsoncompanyF: AP: 4060
    pour l' obtention de cette liste :
    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
    lawsoncompanyF: 4010
    lawsoncompanyF: 4011
    lawsoncompanyF: 4012
    lawsoncompanyF: 4013
    lawsoncompanyF: 4014
    lawsoncompanyF: 4015
    lawsoncompanyF: 4016
    lawsoncompanyF: 4017
    lawsoncompanyF: 4018
    lawsoncompanyF: 4019
    lawsoncompanyF: 4020
    lawsoncompanyF: XR: 3010
    lawsoncompanyF: XR: 3011
    lawsoncompanyF: XR: 3012
    lawsoncompanyF: 4050
    lawsoncompanyF: 4051
    lawsoncompanyF: 4052
    lawsoncompanyF: 4069
    lawsoncompanyF: AP: 4060
    Merci D'avance {~_^}

  2. #2
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Par défaut
    voila j'ai sous la main deux commande une avec "awk" et l'autre avec "perl"
    celle de awk :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F'[:-]' '{for(x=$2 ; x <=$3 ; x++) printf("%s: %d\n", $1, x)}' < decompactage
    et l'autre avec perl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -ne '/(.*?:)\s*(\d+)-(\d+)/;for $e($2 .. $3){ print "$1 $e\n" }' decompactage
    ce qui me donne pour sortie :

    perl :
    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
    dev4: ./script_decompactage_3.sh
    lawsoncompanyF: 4010
    lawsoncompanyF: 4011
    lawsoncompanyF: 4012
    lawsoncompanyF: 4013
    lawsoncompanyF: 4014
    lawsoncompanyF: 4015
    lawsoncompanyF: 4016
    lawsoncompanyF: 4017
    lawsoncompanyF: 4018
    lawsoncompanyF: 4019
    lawsoncompanyF: 4020
    lawsoncompanyF: XR: 3010
    lawsoncompanyF: XR: 3011
    lawsoncompanyF: XR: 3012
    lawsoncompanyF: XR: 3013
    lawsoncompanyF: XR: 3014
    lawsoncompanyF: XR: 3015
    lawsoncompanyF: XR: 3016
    lawsoncompanyF: XR: 3017
    lawsoncompanyF: XR: 3018
    lawsoncompanyF: XR: 3019
    lawsoncompanyF: XR: 3020
    lawsoncompanyF: 4050
    lawsoncompanyF: 4051
    lawsoncompanyF: 4052
    5 0
    dev4:
    tout d'abord un probleme le " 5 0 " a la fin de la liste (en rouge ),
    ainsi qu'il manque les deux compagnie :
    lawsoncompanyF: 4069
    lawsoncompanyF: AP: 4060

    et awk :
    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
    dev4: ./script_decompactage_2.sh
    lawsoncompanyF: 4010
    lawsoncompanyF: 4011
    lawsoncompanyF: 4012
    lawsoncompanyF: 4013
    lawsoncompanyF: 4014
    lawsoncompanyF: 4015
    lawsoncompanyF: 4016
    lawsoncompanyF: 4017
    lawsoncompanyF: 4018
    lawsoncompanyF: 4019
    lawsoncompanyF: 4020
    lawsoncompanyF: 4050
    lawsoncompanyF: 4051
    lawsoncompanyF: 4052
    dev4:
    pour awk il manque
    lawsoncompanyF: 4069
    lawsoncompanyF: AP: 4060

    ainsi que le decompactege de
    lawsoncompanyF: XR: 3010-3012

    je touche donc presque la solution , j'aurais donc besoin d'aides pour combler les erreurs , ou ajouter une option etc ...
    pour pouvoir avoir au final cette liste :

    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
    lawsoncompanyF: 4010
    lawsoncompanyF: 4011
    lawsoncompanyF: 4012
    lawsoncompanyF: 4013
    lawsoncompanyF: 4014
    lawsoncompanyF: 4015
    lawsoncompanyF: 4016
    lawsoncompanyF: 4017
    lawsoncompanyF: 4018
    lawsoncompanyF: 4019
    lawsoncompanyF: 4020
    lawsoncompanyF: XR: 3010
    lawsoncompanyF: XR: 3011
    lawsoncompanyF: XR: 3012
    lawsoncompanyF: 4050
    lawsoncompanyF: 4051
    lawsoncompanyF: 4052
    lawsoncompanyF: 4069
    lawsoncompanyF: AP: 4060
    Merci d'avance

  3. #3
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Essaye ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    awk '
    {
     n=split($NF,a,"-")
     if(n==1) print $0
     else {
       sub("." $NF,"")
       for(i=a[1];i<=a[2];i++) {
        print $0 " " i
       }
     }
    }
    '
    Sous Solaris, remplacer awk par nawk.

  4. #4
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Par défaut
    Merci ! vraiment je suis trop content , pourrait tu m'expliquer un peu? car je n'ai pas trop compris ton script a part qu'il fonctionne , je suis suis super content !

    Merci encore

  5. #5
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Le même avec des commentaires.

    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
    awk '
    {
    # NF est le nombre de champs
    # $NF est la valeur du dernier champs
    # split découpe ce dernier champs en morceaux en prenant "-" comme séparateur
    # split retourne le nombre de morceaux trouvés
    # split construit un tableau nommé "a"
     n=split($NF,a,"-")
    # s'il n'y a qu'un morceau, on affiche la ligne originale ($0) , pas de traitement donc
     if(n==1) print $0
    # sinon, il y a une plage a traiter: 
     else {
    # on supprime le dernier champs et le caractère qui le précède dans $0
       sub("." $NF,"")
    # pour chaque valeur 
       for(i=a[1];i<=a[2];i++) {
    # on affiche $0 tronqué suivi du numero voulu
        print $0 " " i
       }
     }
    }
    '

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/07/2004, 21h00
  2. Transmission d'un objet crée dans une fonction
    Par EvilAngel dans le forum ASP
    Réponses: 2
    Dernier message: 10/05/2004, 20h19
  3. PB de tables créées sous Windev
    Par Reynald dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/04/2004, 10h22
  4. Test table créée
    Par Fabsou dans le forum Langage SQL
    Réponses: 7
    Dernier message: 09/02/2004, 15h08
  5. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37

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