Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Unix > AIX
AIX Forum d'entraide sur le système AIX. Avant de poster -> FAQ AIX et cours AIX
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/07/2011, 22h54   #1
Invité de passage
 
Homme
Responsable d'équipe support de production (support technique et fonctionnel)
Inscription : 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
Points : 0
Points : 0
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.
Scofield38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 09h49   #2
Membre Expert
 
Homme
Ingénieur développement logiciels
Inscription : octobre 2008
Messages : 1 375
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

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

Informations forums :
Inscription : octobre 2008
Messages : 1 375
Points : 2 034
Points : 2 034
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).
matafan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h15.


 
 
 
 
Partenaires

Hébergement Web