[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Script shell pour parsing de fichiers



Le mardi 04 octobre 2005 à 18:21 +0200, gmane.linux.debian.user.french a
écrit :
> Bonjour  tous
Coucou!
> 
> J'ai un petit problme avec un script shell que je suis en train de faire
> ...
> 
> En gros ce que je veux faire c'est rcuprer dans les fichiers contenant les
> mail d'un serveur mail ( dans /var/mail/* ) la date du plus ancien message
> dans la boite ...
> 
> J'ai donc fait un script qui (idalement) liste les comptes mail et parse
> les lignes contenant "From " pour me donner la date du plus ancien message :
> 
> #!/bin/sh
> ls /var/mail/ > liste_comptes
> cat liste_comptes > tmp_compte | head  /var/mail/$tmp_compte -n 1  | grep
> "From " |awk '{print $tmp_compte "date : " $5 " " $4 " " $7}' | tee
> liste_mail
> 
> le ls liste les boite mails ( ca fonctionne )
> et la commande suivant fonctionne correctement aussi :
> head  /var/mail/toto -n 1  | grep "From " |awk '{print "date : " $5 " " $4 "
> " $7}' | tee liste_mail
> 
> le seul souci qu'il me reste est de passer la liste des boites mail (
> fichier liste_comptes ) dans ma commande head pour lister tous les comptes
> avec les date des mail ...
si tu "cat" dans un fichier, tu n'as pas de sortie réutilisable
directement. Tu peux pour cela utiliser tee ou bien tout simplement
re-"cat"(t?)er le fichier:
cat tmp_comptes | head [...]

Ne voyant pas bien l'intéret du "cat liste_comptes > tmp_compte | ",
d'ailleurs.

le grep ne sert à rien puisque tu n'affiches que la première ligne, à
moins qu'il y ait des fichiers dont la première ligne ne contient pas
"from" et que tu ne veux pas traiter.

Est-ce que cela convient:

#!/bin/sh
for file in `ls /var/mail/"`; do
	head -1 $file | awk '{print $file "date : " $5 " " $4 " " $7}' | tee
liste_mail
done

Si le from n'est pas toujours dans la première ligne, tu remplaces le
head -1 par un grep "From ".
> 
> J'espere avoir t clair :-S
J'espère avoir compris
> 
> Ma question est assez simple ... comment faire pour faire ma commande head
> sur chaque ligne du fichier liste_comptes
Une commande head sur chaque ligne d'un fichier??? :o man head
> 
> En effet jusqu'a prsent mon script me dit "head: /var/mail/: Is a
> directory" ce qui veut dire que mon $tmp_compte est vide
> 
> Merci de votre aide
Espérant que ça marche :p
> 
> Nico
++ ;)
> 
> 
> 
> 
-- 
-----------------------------------------------------------------------
         Ma clé GPG est disponible sur http://www.keyserver.net
-----------------------------------------------------------------------
                 _____________________________________________________
                |            Protégez votre vie privée:               |
      \|||/     | - Signez/chiffrez vos messages.                   __|
     q o - p    |            Respectez celle des autres:           | /
__mn__\_^_/_nm__| - Masquez les destinataires de vos mailings      |/
                |__________________________________________________/

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: