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 :

Demande d'aide sur un script en BASH : commande awk


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club Avatar de Kilderoy
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2015
    Messages : 24
    Points : 31
    Points
    31
    Par défaut Demande d'aide sur un script en BASH : commande awk
    Bonjour à tous et à toutes,

    Je suis en train de travailler des annales de concours et je suis tombé sur ce programme en bash :

    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
    #!/bin/sh
    ori="/export/home"
    dest="/export/home/tests/"
    mois="May"
    echo "debut des traitements"
    liste=`ls -lt $ori* |awk '$6 ~/'$mois'/ && $8 ~/:/ {print $9}'`
    if test -s $liste
    then
        echo "des fichiers sont a copier pour le mois de $mois"
    fi
    for fichier in $liste
    do
        if test -d $fichier
        then
            echo "pas de recopie $fichier"
        else
            echo "copie de $fichier vers $dest"
            cp $fichier $dest
        fi
    done
    echo "fin des traitements"
    le problème, c'est moi dans la mesure où je possède pas encore suffisamment de connaissances pour des instructions évoluées du type awk ( même si je subodore de très loin sa fonction générale ).
    Quelqu'un pourrait-il me dire ce que fait la ligne dans laquelle se trouve awk ?

    Je vous remercie d'avance pour toutes vos réponses
    Mes multiples notes de travail au milieu de bien d'autres choses : Le savoir n'est intéressant que si il est partagé

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 391
    Points
    19 391
    Par défaut
    Bonjour,

    d'abord, ce n'est pas un programme bash, mais un programme sh.
    ensuite, on n'utilise pas ls dans un script : c'est source d'ennuis.
    par exemple, depuis l'écriture de ce script le champ #6 ne représente plus le mois.

    il vaut mieux scripter davantage, avec une boucle for dans laquelle on appliquera stat sur chaque fichier,
    ou find avec -printf pour définir un format d'affichage personnel se terminant par un caractère NULL, dont on parcourra la sortie avec une boucle while pour éviter les noms de fichier contenant des espaces et autres.

    il y a un tuto dans la FAQ.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre régulier
    Homme Profil pro
    Expert Middleware
    Inscrit en
    Septembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Expert Middleware

    Informations forums :
    Inscription : Septembre 2006
    Messages : 75
    Points : 100
    Points
    100
    Par défaut
    Salut,

    le code awk affiche le champs 9 (nom du fichier) si le champs 6 contient au mois en variable et le champs 8 contient un :

    Syberi@
    Quand on est mort, on ne sait pas qu’on est mort, c’est pour les autres que c’est difficile… Quand on est con, c’est pareil.

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 391
    Points
    19 391
    Par défaut
    mais ça n'arrivera pas, comme je l'ai expliqué.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    D'abord, je n'ai pas compris vos réponses puisque personne ne parle du mois de mai. Ou May, plutôt .

    Ensuite, je remarque que personne ne s'offusque qu'il n'y ait pas de substitution de commande ... rien ne sera exécuté !

    Enfin, j'imagine que la réponse attendue est que le awk fait un filtre et affiche le début du nom de fichier (qui contient un espace évidemment ) si le fichier a été modifié en mai et que l'on a une heure plutôt que l'année dans le 8ème champ.

    PS: cette commande fonctionne avec ma version de ls (ls (GNU coreutils) 8.26)
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 391
    Points
    19 391
    Par défaut
    si, il y a_vait des substitutions de commandes, mais elles ont été effacées lors de la conversion de l'image postée en pièce jointe en texte.
    je les restaure à la main.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ ls --version
    ls (GNU coreutils) 8.31
    Copyright © 2019 Free Software Foundation, Inc.
    [...]
    $ ls -l lorem\ ipsum
    -rw-r--r-- 1 nbah nbah 3367 18 oct.  16:06 'lorem ipsum'
     $
    le sixième champ est le jour du mois (18), parce que ma locale est configurée à France.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ LC_ALL=C ls -l lorem\ ipsum
    -rw-r--r-- 1 nbah nbah 3367 Oct 18 16:06 'lorem ipsum'
    "en anglais", ça fonctionne, en effet.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Nouveau membre du Club Avatar de Kilderoy
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2015
    Messages : 24
    Points : 31
    Points
    31
    Par défaut
    Je vous remercie tous d'avoir répondu.

    Je sens que je vais encore avoir du boulot avant de rédiger une réponse à moitié correcte mais l'ensemble des éléments que vous m'avez donnés me permettra ( enfin, j'espère ) de rédiger une réponse pas trop incohérente.
    Mes multiples notes de travail au milieu de bien d'autres choses : Le savoir n'est intéressant que si il est partagé

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 391
    Points
    19 391
    Par défaut
    il ne faut pas prendre ce script en exemple :
    • il est vieux : on n'utilise plus ce type de Substitution de commandes depuis un bon moment
    • il n'y a pas de guillemets autour des variables
    • il est mal conçu : il utilise une variable plate pour stocker des "mots" pouvant comporter un caractère figurant dans l'[/c]IFS[/c]
    • quitte à faire une boucle sur cette variable, autant faire une boucle directement sur un Développement des chemins
    • ...


    et surtout, il parcourt la sortie de ls.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Nouveau membre du Club Avatar de Kilderoy
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2015
    Messages : 24
    Points : 31
    Points
    31
    Par défaut
    Il est tout à fait vrai que l'épreuve date de 2009 et que, par conséquence, le script peut être considéré à raison comme étant quelque peu poussiéreux.

    Cela étant et au-delà du fait que je suis très très très ........ très loin d'être d'une compétence quelconque à ce jour, je pars du raisonnement qu'il peut m'apporter quelque chose. En particulier, de pouvoir échanger avec des personnes plus compétentes que moi qui, par leur point de vue, me permettent également d'appréhender l'épreuve sous un oeil plus global et plus avancé que le mien

    Et puis, si il n'y avait pas ces multiples difficultés qui nous cassent tant les pieds, les choses seraient moins amusantes

    En tout cas, merci encore pour tous ces éléments satellitaires à l'épreuve.
    Mes multiples notes de travail au milieu de bien d'autres choses : Le savoir n'est intéressant que si il est partagé

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 391
    Points
    19 391
    Par défaut
    apprendre à scier proprement avec une scie tordue et édentée...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Ça fait scier.

    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

Discussions similaires

  1. Besoin d'aide sur un script bash avec redirection et tail
    Par Invité dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 15/09/2014, 13h31
  2. [Batch] Demande d'aide sur le script batch
    Par louispeperman dans le forum Scripts/Batch
    Réponses: 27
    Dernier message: 22/04/2013, 10h42
  3. demande d'aide sur scripts
    Par threepwood dans le forum Linux
    Réponses: 5
    Dernier message: 06/08/2008, 13h34
  4. Demande d'aide sur un script de mise en forme..
    Par threepwood dans le forum Linux
    Réponses: 4
    Dernier message: 24/08/2007, 14h37
  5. demande d'aide sur un script
    Par threepwood dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 24/05/2007, 11h45

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