|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Responsable d'équipe support de production (support technique et fonctionnel) Inscription : juillet 2011 Messages : 2 ![]() |
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. |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : octobre 2008 Messages : 1 375 ![]() |
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). |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com