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 :

problème script et commande awk


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 141
    Points : 53
    Points
    53
    Par défaut problème script et commande awk
    Bonjour,
    dans le répertoire mami/tot/jpg j'ai 6 fichiers(A,B,c,d,e,f) et dans le fichier d
    voila ce que j'ai par exemple ce genre de lignes plusieurs fois:
    02C8020060901148977I081020000
    02C80200609061660002700070603
    02C80200609083520002822080610
    02C80200609100531003171010279


    je veux recupérer dans 2variables var1 et var2 (les elements à parir du 6ème element au 13 element) qui signifie année ,le mois et le jour.
    sachant que var1 est egaleà la plus petite date(date avant) ,et var2 la plus grande date :
    var1=20060901
    var2=20060910



    minute=`date +%M`
    heure=`date +%H`
    jour=`date +%d`
    mois=`date +%B`
    an=`date +%Y`
    mois_chiffre=`date +%m`
    VAR="CUBE_`date +%B`"
    #export an mois jour heure minute
    interface="PH7"
    if [ ! -e mami/tot/jpg ] [! -e fichier d]
    then

    var1=`vi fichier d | tail -1 | head -1 | awk '{ print $6, $7, $8,...,$13}' `
    var2=`vi fichier d | tail -1 | head -1 | awk '{ print $6, $7, $8,...,$13}' `

    echo " ${var1} ,${var2} $an " | mail -s "Information sur ${var} du $jour $mois $an" mamamamamma@chut.fr
    fi
    aidez moi svp je ne sais pas prquoi ça ne marche pas
    quand j'exécute j'ai rien comme message

  2. #2
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !
    J'ai pas regardé tout ton code, awk ne marche pas ainsi :
    awk te parse des colonnes en fonction d'un séparteur.
    Si tu veux travailler sur des position, tu peux utiliser "cut -c"
    "cut -c6-13 MonFichier" te renvoie les caractères "numérotés" de 6 à 13 pour chaque ligne.

    Bon courage.

  3. #3
    Membre confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Points : 622
    Points
    622
    Par défaut
    Ca marche pas?
    Une chose très pratique en shell pour tester si ta commande a réussi, tu tapes

    $? est le code de retour de ta commande. S'il vaut zero, c'est que la commande a réussi et différent zero dans le cas contraire.
    Et à mon avis, c'est au niveau de la cmd awk que ca marche vu que t'as pas indiqué de Field Separator avec l'option -F. Donc je te conseille d'utiliser la commande sed.

    D'apres ce que j'ai compris, tu veux récupérer les dates qui se trouvent sur la première et la dernière ligne du fichier.
    Je te donne la réponse pour var1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var1=$(head -n 1 fichier | sed -r -e 's/ [0-9]{2}[A-Z][0-9]{2}([0-9]{8}).*/\1/p')
    Je te conseille vivement de mieux te documenter sur le shell et ses capacités surtout dans ce genre de situation, ce qui te sera util après.

  4. #4
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Petite remarque :
    Je pense qu'il faut échapper un certain nombre de caractères dans tes expressions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed -r -e 's/ [0-9]\{2\}[A-Z][0-9]\{2\}\([0-9]\{8\}\).*/\1/p'

  5. #5
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Citation Envoyé par publicStaticVoidMain Voir le message
    Ca marche pas?
    [...]
    Je te donne la réponse pour var1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var1=$(head -n 1 fichier | sed -r -e 's/ [0-9]{2}[A-Z][0-9]{2}([0-9]{8}).*/\1/p')
    [...]
    pourquoi faire simple quand on peut faire compliqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var1=$(head -n 1 fichier |cut -c6-12)
    avec awk :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var1=$(head -n 1 fichier |awk '{print substr($0,6,6)}')

  6. #6
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Citation Envoyé par iohack Voir le message
    pourquoi faire simple quand on peut faire compliqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var1=$(head -n 1 fichier |cut -c6-12)
    Entre les indices 6 et 12, il y a 7 caractères
    (Ah, ce que j'aime être lourd !)

  7. #7
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 141
    Points : 53
    Points
    53
    Par défaut
    j'ai aissayé ce que vous m'avez dit mais ça ne marche pas

  8. #8
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 141
    Points : 53
    Points
    53
    Par défaut
    var1 n'est obligatoirement pas la date de la 1ère ligne la date la plus petite qui peut etre à n'importe quelle ligne ainsi que var2.
    merci de m'aidez

  9. #9
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    awk te permet de réaliser des opérations sur chaque ligne.
    Tape "man awk", c'est utile.

    Tu vois l'algorithme basique te permettant de connaître le min et le max de manière itérative (imagine que tu lis le fichier ou l'entrée formattée dans une boucle FOR) ?

    Ben c'est la même, en utilisant les clauses BEGIN et END de awk.
    (je te laisse te documenter sur le sujet)

  10. #10
    Membre confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Points : 622
    Points
    622
    Par défaut
    Citation Envoyé par iohack Voir le message
    pourquoi faire simple quand on peut faire compliqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var1=$(head -n 1 fichier |cut -c6-12)
    avec awk :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var1=$(head -n 1 fichier |awk '{print substr($0,6,6)}')
    Ouiais, on pouvait effectivement utiliser la cmd cut mais ca m'a permis de réviser sed et les regexp avant les exams .

  11. #11
    Membre confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Points : 622
    Points
    622
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Petite remarque :
    Je pense qu'il faut échapper un certain nombre de caractères dans tes expressions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed -r -e 's/ [0-9]\{2\}[A-Z][0-9]\{2\}\([0-9]\{8\}\).*/\1/p'
    Euh....... non puisque j'utilise les expressions régulières étendues avec l'option -r.
    J'ai testé avant et j'ai vu que ca marchait.

  12. #12
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Ok, désolé.
    Je ne dispose pas de l'option -r... ça doit être une question de version de Shell...

  13. #13
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 141
    Points : 53
    Points
    53
    Par défaut
    voila ce que j'ai fait
    !/bin/ksh
    minute=`date +%M`
    heure=`date +%H`
    jour=`date +%d`
    #mois=`date +%B`
    #an=`date +%Y`
    an=2007
    mois=SEPTEMBRE
    if [ -e /sextantapp/m1/fic/PH7/$an/$mois -a -e fichier d ]
    then

    var1= sed -r -e 's/ [0-9]\{2\}[A-Z][0-9]\{2\}\([0-9]\{8\}\).*/\1/p'
    var2=
    echo " datextrac: ${var1}" | mail -s "Information " siiiiiiiii@yahoo.fr
    fi
    mais j'ai rien à l'envoi de mail

  14. #14
    Membre confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Points : 622
    Points
    622
    Par défaut
    Citation Envoyé par sajodia Voir le message
    voila ce que j'ai fait
    !/bin/ksh
    minute=`date +%M`
    heure=`date +%H`
    jour=`date +%d`
    #mois=`date +%B`
    #an=`date +%Y`
    an=2007
    mois=SEPTEMBRE
    if [ -e /sextantapp/m1/fic/PH7/$an/$mois -a -e fichier d ]
    then

    var1= sed -r -e 's/ [0-9]\{2\}[A-Z][0-9]\{2\}\([0-9]\{8\}\).*/\1/p'
    var2=
    echo " datextrac: ${var1}" | mail -s "Information " siiiiiiiii@yahoo.fr
    fi
    mais j'ai rien à l'envoi de mail

  15. #15
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 141
    Points : 53
    Points
    53
    Par défaut
    c'est pour avoir un envoi de mail dans ma boiteafin que je puisse voir les valeurs de var1 et var2,vérifier si c'est juste.
    je l'ai déja utilisé plusieurs fois

  16. #16
    Membre confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Points : 622
    Points
    622
    Par défaut
    Citation Envoyé par sajodia Voir le message
    voila ce que j'ai fait
    !/bin/ksh
    minute=`date +%M`
    heure=`date +%H`
    jour=`date +%d`
    #mois=`date +%B`
    #an=`date +%Y`
    an=2007
    mois=SEPTEMBRE
    if [ -e /sextantapp/m1/fic/PH7/$an/$mois -a -e fichier d ]
    then

    var1= sed -r -e 's/ [0-9]\{2\}[A-Z][0-9]\{2\}\([0-9]\{8\}\).*/\1/p'
    var2=
    echo " datextrac: ${var1}" | mail -s "Information " siiiiiiiii@yahoo.fr
    fi
    mais j'ai rien à l'envoi de mail
    Normal,
    var1 et var2 sont vides. Sur quoi appliques-tu appliques ta cmd sed pour avoir la valeur de var1?

  17. #17
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Teste toujours séparément :
    Essaie ton sed à part (simplement sur ton terminal), et vérifie qu'il te renvoie ce que tu attends.
    sed -n '1 s/.\{5\}\(.\{8\}\).*/\1/p' fichierd

    Ensuite, ton problème vient au moins du fait que tu demandes la valeur d'une variable :

    $(sed -n '1 s/.\{5\}\(.\{8\}\).*/\1/p' fichierd )

    Essaie la mêle chose en enlevant le $

  18. #18
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 141
    Points : 53
    Points
    53
    Par défaut
    Salut
    j'ai testé étape par étape comme vous m'avez dit sur mon terminal mais à chaque fois i je n'ai rien.

    je sais pas d'ou vient le problème .

Discussions similaires

  1. Problème avec la commande awk
    Par etudiant-apprenant dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 10/11/2013, 16h08
  2. problème script avec commande ll ?
    Par sajodia dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 30/05/2008, 11h26
  3. problème script et commande awk
    Par kiell dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 27/05/2008, 12h31
  4. commande awk dans script perl
    Par sorilazer dans le forum Langage
    Réponses: 3
    Dernier message: 19/07/2007, 10h16
  5. problème avec la commande awk
    Par salseropom dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 05/06/2007, 13h02

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