Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2156 connectés 

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Boucle en bash

n°1135967
pamputt
Posté le 18-05-2009 à 13:55:57  profilanswer
 

Bonjour,
je débute en script bash ; c'est pourquoi je me tourne vers vous pour avoir vos conseils.
Je possède un programme assez compliqué accepte deux arguments, le premier est un fichier d'entrée et le second le fichier de sortie. Tous les fichiers de sorties sont de la forme fichier_0xxx où xxx est un nombre à 3 chiffres. Les fichiers d'entrées sont moins uniformes ; ils sont de la forme fichier_0xxx.dat.jour_heure.
Etant donné que j'ai plus d'une centaine de fichier à traiter, j'ai l'idée de faire une boucle pour traiter cela de manière automatique.
Je peux obtenir le nom du fichier d'entrée à l'aide de la commande

Code :
  1. ls /chemin/ |grep xxx


Par exemple, je vais avoir ls /chemin/ | grep 150 qui va me donner fichier_0150.dat.03/05/2009_16:05:12 par exemple.
Je ne sais pas si je suis assez clair mais n'hésitez pas à me poser des questions.

mood
Publicité
Posté le 18-05-2009 à 13:55:57  profilanswer
 

n°1136030
matafan
Posté le 18-05-2009 à 15:46:12  profilanswer
 

for i in /chemin/*_0150.dat*
do
    ton_prog $i fichier_sortie
done

n°1136055
pamputt
Posté le 18-05-2009 à 16:54:01  profilanswer
 

En fait je me suis mal exprimé, tous les fichier d'entrée ont un numéro différent en plus d'un jour et d'une heure différents. Ils n'ont pas tous 150 dans leur nom. Pour donner une idée de ce que je souhaite faire, j'ai fait ce script (qui ne fonctionne pas) :

Code :
  1. #!/bin/sh
  2. for i in `seq 400 402`
  3. echo "/mon/chemin/complet/">temp
  4. ls /mon/chemin/complet/ | grep $i>>temp
  5. tmp=`cat temp`
  6. echo "$tmp"
  7. monprog $tmp fichier_sortie_0$i
  8. done


Il ne fonctionne pas car dans le fichier temp, les deux infos sont sur deux lignes différentes alors que je voudrais qu'elles soient collées l'une derrière l'autre.
Merci d'avance.

n°1136200
twocats
Posté le 19-05-2009 à 01:09:36  profilanswer
 

Citation :

#!/bin/sh
for i in $(seq 400 402)
do
FilesList=$(ls "/mon/chemin/complet/" | grep $i)
echo -e "/mon/chemin/complet/"${FilesList}""
monprogr /mon/chemin/complet/"${FilesList}" fichier_sortie_0$i
done


Non ?


---------------
La réponse est 42
n°1136202
eze203
Posté le 19-05-2009 à 01:19:32  profilanswer
 

Voici l'une des façons de faire ce que tu veux.
 

Code :
  1. #!/bin/bash
  2. ### Définition du chemin vers le dossier cible###
  3. dir=/chemin/vers/dossier/cible/
  4. ###On boucle dans le dossier cible à la recherche
  5. ###des fichiers correspondant à l'expression régulière
  6. for i in `ls $dir | egrep ^_0[0-9]{3}.dat.*$`
  7. do
  8.    ###Peut ne pas être utile mais s'assure que l'élément est un fichier
  9.    if [ -f "$dir$i" ]; then
  10.         #On fait passer le fichier d'entrée et le fichier de sortie en
  11.         #argument (mise en forme du nom de sortie en sélectionnant les 5
  12.         #premiers octets du nom du fichier d'entrée (_0xxx)
  13.         monprogramme "$dir$i" "$dir$(echo $i | cut -b 1-5)"
  14.    fi
  15. done


Message édité par eze203 le 19-05-2009 à 01:21:21
n°1138582
sputnick
bip...bip...bip...bip...bi...b
Posté le 28-05-2009 à 02:44:32  profilanswer
 

eze203, c'est crade...
 
for i in $dir/_0[0-9][0-9][0-9].dat*; do DoSomethingWith "$i"; done


Aller à :
Ajouter une réponse
 

Sujets relatifs
Petit script bash [resolu][bash] Extinction auto du pc si idle et eth0 non sollicité
[Bash] Script de création de clés SSH automatiquebash : extraction de caractères
Script bash : récuperer des données dans un fichier[BASH] Amélioration de script (boucle et autre)
lancer un script bash qui tourne en boucle au demarrageBash] Boucle while - export variable
[BASH] traiter des fichiers dans un boucle for[Bash] Affectation de données dans un tabeau via une boucle
Plus de sujets relatifs à : Boucle en bash


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR