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

Linux Discussion :

awk me rend fou


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 21
    Points : 9
    Points
    9
    Par défaut awk me rend fou
    bonsoir
    j'ai une commade qui fonctionne bien

    $file|awk -F . '{print $NF}'

    renvoi l'extension d'un fichier; quand je fais un echo
    echo $file|awk -F . '{print $NF}'

    ca m'affiche la bon extension.

    mais dans un script bash quand je fais un

    ext=$file|awk -F . '{print $NF}'
    echo ext j'ai du blanc.

    quelqu'un peut m'expliquer comment je peux récuperer le resultat de la commande dans une variable ?
    merci d'avance.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Points : 33
    Points
    33
    Par défaut
    Salut,

    il suffit de dire a bash d'interpréter la commande avant de l'affecter dans la variable.

    Pour se faire:

    variable=$(commande a executer)

    donc pour toi:

    extension=$($file|awk -F . '{print $NF}')

    ensuite un echo $extension te renvera bien ce que tu desires.

    il existe d'autre facon d'ecrire $(...) mais je ne les utilise pas donc je ne les aient pas mémorisés

    Voila , @+

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 730
    Points : 31 053
    Points
    31 053
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pinpom Voir le message
    Salut,

    il suffit de dire a bash d'interpréter la commande avant de l'affecter dans la variable.
    Le terme "interpréter" est assez confus car le bash interprète déjà toute commande. Donc quand tu tapes "date", le bash interprète cette commande et l'exécute normalement.
    En fait, ce mécanisme que tu cites est plus vu comme une "sous-exécution" ou encore "délégation". Le shell délègue à un programme annexe ce qu'il ne sait pas faire et se contente de récupérer ce que le programme affiche pour le retraiter à son niveau comme si cet affichage en question était du code shell tapé par le programmeur.
    Exemple
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if test "$(pwd)" = "/tmp"
    then
        ...
    fi
    Le shell commence par sous-exécuter la commande "pwd". Cette commande affiche le répertoire courant, par exemple "/titi/toto". Le shell récupère donc cet affichage "/titi/toto" et le replace dans le contexte où le mécanisme a été placé (juste après le "if" et avant le "="). Et finalement le shell exécute le code suivant:
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if test "/titi/toto" = "/tmp"
    then
        ...
    fi

    Une fois le principe compris, on peut s'en servir comme on veut quand on veut. Ce mécanisme apporte une énorme souplesse au programmeur shell. S'il doit exécuter un travail complexe que le shell ne sait pas faire, soit il fait appel aux outils externes capables d'exécuter le travail, soit il programme lui-même l'outil en question dans un langage plus fort (style C/C++) en s'arrangeant pour que l'outil affiche son résultat à l'écran puis il demande au shell d'utiliser l'outil et récupère simplement ce que l'outil affiche.

    Citation Envoyé par pinpom Voir le message
    il existe d'autre facon d'ecrire $(...) mais je ne les utilise pas donc je ne les ai pas mémorisés
    La syntaxe d'origine des premiers shells était ``
    => extension=`$file|awk -F . '{print $NF}'`

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    La syntaxe d'origine des premiers shells était ``
    => extension=`$file|awk -F . '{print $NF}'`
    elle est toujours

    @central.jaco :

    le fait d'entourer d'accents graves (quote inversée) comme le signale Sve@r exécute ce qu'il y entre..

    Sans les mettre, tout ce que tu fais est définir une variable...

Discussions similaires

  1. Visual Studio et Internet Explorer me rende fou :)
    Par neptune dans le forum ASP.NET
    Réponses: 4
    Dernier message: 13/11/2007, 15h05
  2. Un timer me rend fou. Est ce logique ?
    Par DOC doc doc dans le forum Simulink
    Réponses: 7
    Dernier message: 29/08/2007, 11h29
  3. [Débutant] une boucle for me rend fou.
    Par SirDarken dans le forum Langage
    Réponses: 6
    Dernier message: 12/09/2006, 23h25
  4. fonction log me rend fou
    Par adel25 dans le forum C++
    Réponses: 2
    Dernier message: 16/10/2005, 10h16

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