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 POSIX Discussion :

Formater la sortie ls * -1 | wc -l


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Consultant MOA
    Inscrit en
    Décembre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant MOA

    Informations forums :
    Inscription : Décembre 2012
    Messages : 24
    Par défaut Formater la sortie ls * -1 | wc -l
    Bonjour à tous.

    Je travaille sous 2 environnement différents et le résultat de la commande ls * -1 | wc -l est différent.

    Code machine1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    lalie@machine1> uname -a
    Linux machine1 2.6.9-55.ELsmp #1 SMP Fri Apr 20 16:36:54 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux
    lalie@machine1> ls *.dat | wc -l
    40
    lalie@machine1>
    Code machine2 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    lalie@machine2> uname -a
    Linux machine2 2.4.21-37.ELsmp #1 SMP Wed Sep 7 13:28:55 EDT 2005 i686 i686 i386 GNU/Linux
    lalie@machine2> ls *.dat | wc -l
          8
    lalie@machine2>

    Cela me pose probléme car je veux effectuer ensuite une operation du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if [ "$existence_fichier" >= "0" ]; then
    ...
    fi
    Or sur la machine 2, cela me retourne un espace avant le nombre. Du coup :
    • le programme rentre dans la boucle, ce qui est OK
    • le programme ne rentre pas dans la boucle, ce qui est anormale


    Y a-t-il possibilité de formater ls pour que le script marche sous les 2 environnements ?

    Merci d'avance

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Avec la suppression des quotes ou avec le remplacement de paramètres, aux choix :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ A="     8"
     
    $ echo "${A}"
         8
     
    $ echo ${A}
    8
     
    $ echo "${A// }"
    8
     
    $

  3. #3
    Membre averti
    Femme Profil pro
    Consultant MOA
    Inscrit en
    Décembre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant MOA

    Informations forums :
    Inscription : Décembre 2012
    Messages : 24
    Par défaut
    Je comprends plus rien
    J'ai testé avec ta solution

    Code TERMINAL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    lalie@machine2> ls *.dat | wc -l
          8
    lalie@machine2> LMZ=$(ls *.dat | wc -l)
    lalie@machine2> echo $LMZ
    8
    lalie@machine2>

    L'espace disparait comme par magie. Alors qu'il reste dans le script
    Code SCRIPT.ksh : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    existence_fichier=$(ls *.dat -1 | wc -l)
    echo "${existence_fichier// }"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    lalie@machine2> ./script.ksh
    test
          8
    lalie@machine2>

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Tu n'emploies pas la même méthode entre le terminal et le script

    Chez moi ça marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ cat foo.ksh 
    #!/bin/ksh
     
    A="     8"
    echo "${A}"
    echo ${A}
    echo "${A// }"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ ./foo.ksh 
         8
    8
    8
     
    $

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    C'est un test de ce type que tu veux effectuer ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if [ $(ls -1 *.dxt 2>/dev/null | wc -l) -ge 1 ]
    then
      echo "Fichier existe"
    fi
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Membre averti
    Femme Profil pro
    Consultant MOA
    Inscrit en
    Décembre 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant MOA

    Informations forums :
    Inscription : Décembre 2012
    Messages : 24
    Par défaut
    Ca marche nickel avec ta réponse al1_24

    Je te remercie beaucoup

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    C'est un test de ce type que tu veux effectuer ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if [ $(ls -1 *.dxt 2>/dev/null | wc -l) -ge 1 ]
    then
      echo "Fichier existe"
    fi
    Juste à titre indicatif: le '-1' ne sert à rien.

    On peut simplifier en testant juste le status (plutôt que piper par wc):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ls *.dxt 2>/dev/null
    then echo "Fichier existe"
    fi

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

Discussions similaires

  1. Format de sortie
    Par xtitof dans le forum Fortran
    Réponses: 2
    Dernier message: 20/03/2007, 11h36
  2. [Sqlplus] Format de sortie
    Par cheung dans le forum Sql*Plus
    Réponses: 7
    Dernier message: 03/11/2006, 09h28
  3. Réponses: 8
    Dernier message: 15/06/2006, 20h56
  4. [VB6] debutant format de sortie d un fichier
    Par Slumpy dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/05/2006, 21h49
  5. format de sortie commande \pset
    Par Alesk dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 30/01/2006, 14h48

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