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

AIX Discussion :

Utilisation de gsub dans AWK pour remplacer des espaces par des underscores


Sujet :

AIX

  1. #1
    Candidat au Club
    Homme Profil pro
    Responsable d'équipe support de production (support technique et fonctionnel)
    Inscrit en
    Juillet 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable d'équipe support de production (support technique et fonctionnel)
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 2
    Par défaut Utilisation de gsub dans AWK pour remplacer des espaces par des underscores
    Je dois mettre en place un script UNIX de surveillance de fichiers dépassant un seuil de 5 Mo à leur arrivée dans un répertoire UNIX.

    Seul problème, dans la boucle for de mon script, cela plante car certains noms de fichiers importés dans l'application comportent des espaces.

    Bref quand je fais un ls -lrt |awk '$5>=5000000 {print $9}', les noms de fichiers sont éclatés par les espaces et considérés ensuite comme des arguments différents du for.

    Pour éviter cela, j'ai voulu remplacer temporairement les espaces contenus dans les noms de fichiers par des underscores.

    Malgré tous mes tests, je ne m'en sors pas avec la fonction gsub de AWK.
    J'ai tenté ceci -> ls -lrt |awk '$5>=5000000 {gsub(/ /, "_", $9); print $9}'

    En vain, le résultat de la commande est identique à celle sans le gsub.
    Pour info, je code sur un shell ksh en AIX 5.3.

    Comment dois-je gérer mon gsub ? Existe-t-il d'autres solutions plus simples pour contourner mon problème qui bloque pour l'instant le bon traitement de ma boucle for ?

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Difficile de te conseiller sans savoir exactement ce que tu veux faire. Tu parles d'une boucle for, mais on ne la voit pas. Je ne sais pas donc pas si le problème est avant le awk, dans le awk ou après le awk.

    Dans ton code $9 est le premier mot du nom de fichier, donc ton gsub() ne sert à rien : tu n'aura de toute façon jamais d'espace dans $9.

    Si tu veux extraire le nom de fichier complet dans ton bout de awk, tu peux exploiter le fait qu'ils sont tous alignés à la colonne 59 et utiliser substr($0, 59). Ensuite si ton problème est de récupérer dans le shell les noms de fichiers affichés pas awk (avec des espaces), tu peux le régler soit en utilisant une boucle while read, ou bien avec un for en positionnant IFS="^J" (tu fais ^J en faisant Ctrl-v Ctrl-j).

Discussions similaires

  1. [CR 2008] remplacer les 'crlf' par des espaces dans un texte de "type" RTF
    Par digitfree dans le forum Formules
    Réponses: 5
    Dernier message: 02/04/2013, 11h18
  2. remplacer les espaces par des _ dans une table
    Par NeutronDance dans le forum Requêtes
    Réponses: 3
    Dernier message: 15/10/2010, 00h16
  3. Remplacer des Tabulations par des espaces dans une RichTextBox
    Par skar.theparadiz dans le forum Windows Forms
    Réponses: 11
    Dernier message: 11/07/2008, 14h43
  4. Comment remplacer les tabulations par des espaces ?
    Par richarno dans le forum Langage
    Réponses: 7
    Dernier message: 25/10/2007, 13h05

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