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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Kilderoy
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    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 éprouvé
    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
    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@

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    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 confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    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)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    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.

+ 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