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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Script shell scripting bash/Linux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Script shell scripting bash/Linux

n°2039769
yims1er
Posté le 03-12-2010 à 01:13:18  profilanswer
 

Je souhaiterai créer un script (shell scripting - bash) qui devra manipuler des fichiers.  
J'ai deux dossiers nommés respectivement « Server » et « Printer ».
Le dossier Server contient trois fichiers à savoir : 2009-10-02.info , 2009-10-17.info et 2009-10-24.info.
 
Le fichier 2009-10-02.info contient comme information :
Elvis:10h30:"stopping apache2 server"
 
Costello:10h40:"updating DNS Database from DNS Server"
 
Parker:10h42:"stopping LDAP Server"
 
Costello:11h15:"restarting DNS Server"
 
Parker:23h43:"stopping DNS Server"
 
 
le fichier 2009-10-17.info le meme type d'information :
Elvis:8h20:"starting apache2 server"
 
Costello:10h10:"starting DNS Server"
 
Costello:13h20:"updating DNS Database from DNS Server"
 
Elvis:17h30:"stopping apache2 server"
 
Costello:18h00:"restarting DNS Server"
 
 
etc....
 
Le script va devoir traiter ces 3 fichiers puis générer un seul fichier « Server.info »
contenant toutes les informations de ces fichiers triés par
 
User ID. Ces fichiers devront ensuite être copiés dans le dossier passé en paramètre.
 
 
Fichier résultat Server.info après traitement : « par exemple »
101:2009-10-2:Elvis:10h30:"stopping apache2 server"
 
101:2009-10-17:Elvis:8h20:"starting apache2 server"
 
101:2009-10-17:Elvis:17h30:"stopping apache2 server"
 
102:2009-10-2:Costello:10h40:"updating DNS Database from DNS Server"
 
102:2009-10-2:Costello:11h15:"restarting DNS Server"
 
102:2009-10-17:Costello:10h10:"starting DNS Server"
 
102:2009-10-17:Costello:13h20:"updating DNS Database from DNS Server"
 
102:2009-10-17:Costello:18h00:"restarting DNS Server"
 
103:2009-10-2:Parker:10h42:"stopping LDAP Server"
 
103:2009-10-2:Parker:23h43:"stopping DNS Server"
 
 
Voilà...
Le User Id est celui du fichier et la date est récupéré à partir du nom du fichier.
 
Merci bien.


Message édité par yims1er le 03-12-2010 à 01:16:04
mood
Publicité
Posté le 03-12-2010 à 01:13:18  profilanswer
 

n°2039816
Nukolau
Posté le 03-12-2010 à 10:44:31  profilanswer
 

Je n'ai pas compris pourquoi tu parlais du répertoire printer, ni a quoi correspondent les 101,102,.. devant tes lignes.
 
En tout cas pour générer le Server.info, tu peux faire quelque chose du style :
 

Code :
  1. grep -H ".*" $REP/* | sort -t':' -k2 | sed "s%$REP/%%'


 
Le sed permet de supprimer le chemin dans l'affichage du nom de fichier. Peut-être qu'il existe un moyen plus élégant, mais comme ca je ne vois pas.
Par contre le sort tri sur le UserID, mais dans ton fichier exemple, les heures ne sont pas préfixées par un 0 quand elles sont inférieures à 10h, ce qui signifie que la ligne avec le 8h20 se trouvera après la ligne avec le 17h30.

n°2039949
yims1er
Posté le 03-12-2010 à 19:31:58  profilanswer
 

En fait j'ai juste prit le répertoire Printer pour généraliser une situation.....
Mais le répertoire Server avec ses exemples de fichiers rend le devoir plus clair.
101,102 représente le UserID de l'utilisateur.
La date est récupéré est à partir du fichier en question.
Merci

n°2039950
yims1er
Posté le 03-12-2010 à 19:34:04  profilanswer
 

Nukolau a écrit :

Je n'ai pas compris pourquoi tu parlais du répertoire printer, ni a quoi correspondent les 101,102,.. devant tes lignes.
 
En tout cas pour générer le Server.info, tu peux faire quelque chose du style :
 

Code :
  1. grep -H ".*" $REP/* | sort -t':' -k2 | sed "s%$REP/%%'


 
Le sed permet de supprimer le chemin dans l'affichage du nom de fichier. Peut-être qu'il existe un moyen plus élégant, mais comme ca je ne vois pas.
Par contre le sort tri sur le UserID, mais dans ton fichier exemple, les heures ne sont pas préfixées par un 0 quand elles sont inférieures à 10h, ce qui signifie que la ligne avec le 8h20 se trouvera après la ligne avec le 17h30.


________________________________________________
En fait j'ai juste prit le répertoire Printer pour généraliser une situation.....
Mais le répertoire Server avec ses exemples de fichiers rend le devoir plus clair.
101,102 représente le UserID de l'utilisateur.
La date est récupéré est à partir du fichier en question.
Merci

n°2040066
Nukolau
Posté le 05-12-2010 à 00:55:16  profilanswer
 

ah ok c'est l'UID du fichier qui fait foi pas le nom de l'utilisateur contenu dans le fichier. Je comprends mieux ;)

 

Bah du coup, je ne vois pas comment éviter une boucle, un truc du genre :

 
Code :
  1. find $1 -type f -printf "%U %f\n" | sort -n | while read USER FILE
  2. do
  3.   for LINE in `cat $1/$FILE`
  4.   do
  5.     echo "$USER:$FILE:$LINE"
  6.   done
  7. done

Message cité 1 fois
Message édité par Nukolau le 05-12-2010 à 13:42:50
n°2042311
yims1er
Posté le 15-12-2010 à 13:14:04  profilanswer
 

Nukolau a écrit :

ah ok c'est l'UID du fichier qui fait foi pas le nom de l'utilisateur contenu dans le fichier. Je comprends mieux ;)
 
Bah du coup, je ne vois pas comment éviter une boucle, un truc du genre :
 

Code :
  1. find $1 -type f -printf "%U %f\n" | sort -n | while read USER FILE
  2. do
  3.   for LINE in `cat $1/$FILE`
  4.   do
  5.     echo "$USER:$FILE:$LINE"
  6.   done
  7. done



 
 
 
Merci!!!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Script shell scripting bash/Linux

 

Sujets relatifs
script de téléchargement[Python] Script crawler Multi-thread
script javascriptDroit d'accès avec Alsa et Gtk (Gnu/Linux)
Script pour rotation de bannièreLangage de script
Script pour visualiser base de donnée SQL serverAide script php + mysql
Cookies en localhostcours programmation script sous Unity 3D
Plus de sujets relatifs à : Script shell scripting bash/Linux


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