Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Script shell pour parsing de fichiers

5 réponses
Avatar
gmane.linux.debian.user.french
Bonjour à tous

J'ai un petit problême avec un script shell que je suis en train de faire
...

En gros ce que je veux faire c'est récupérer 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 (idéalement) 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 ...

J'espere avoir été clair :-S

Ma question est assez simple ... comment faire pour faire ma commande head
sur chaque ligne du fichier liste_comptes

En effet jusqu'a présent mon script me dit "head: /var/mail/: Is a
directory" ce qui veut dire que mon $tmp_compte est vide

Merci de votre aide

Nico




--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

5 réponses

Avatar
Laurent CARON
gmane.linux.debian.user.french a écrit :

Bonjour à tous

J'ai un petit problême avec un script shell que je suis en train de faire
...

En gros ce que je veux faire c'est récupérer 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 (idéalement) 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 ...

J'espere avoir été clair :-S

Ma question est assez simple ... comment faire pour faire ma commande head
sur chaque ligne du fichier liste_comptes

En effet jusqu'a présent mon script me dit "head: /var/mail/: Is a
directory" ce qui veut dire que mon $tmp_compte est vide

Merci de votre aide

Nico








for i in /var/mail/*
do
commande $i
done


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
manioul
--=-XffAvFu3DtwnNdTSOiD1
Content-Type: text/plain; charset=ISO-8859-15
Content-Transfer-Encoding: quoted-printable

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 le s
mail d'un serveur mail ( dans /var/mail/* ) la date du plus ancien messag e
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 messag e :

#!/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 compte s
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 hea d
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 |/
|__________________________________________________/


--=-XffAvFu3DtwnNdTSOiD1
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)

iD8DBQBDQr64csdrgK9aigMRAm+rAJwNwk+/qyTrwORKObS8jdEJTvdT9ACfRtdV
WZsC3tBejYiTDqYkkIXCTck =iRqT
-----END PGP SIGNATURE-----

--=-XffAvFu3DtwnNdTSOiD1--


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jacques L'helgoualc'h
gmane.linux.debian.user.french a écrit, mardi 4 octobre 2005, à 18:21 :
Bonjour à tous



bonsoir,

J'ai un petit problême avec un script shell que je suis en train de faire
...

En gros ce que je veux faire c'est récupérer dans les fichiers contenant les
mail d'un serveur mail ( dans /var/mail/* ) la date du plus ancien message
dans la boite ...



A priori, le plus vieux message de chaque boîte devrait être en tête...

for f in /var/mail/*
do
d=`sed -ne '1s/^From +[^ ]*//p;q' "$f"`
[ -n "$d" ] && date "+%s $d $f" -d "$d"
done | sort -n

Si les messages ne sont pas dans l'ordre chronologique,

for f in /var/mail/*
do
sed -ne 's/^From +[^ ]*//p' "$f" |
while IFS="n" read d
do
[ -n "$d" ] && date "+%s $d $f" -d "$d"
done
done | sort -n

PS. pas de % dans les $f, bien sûr.
--
Jacques L'helgoualc'h


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
gmane.linux.debian.user.french
Salut Jacques,

Nikel merci ;-)

Nico

"Jacques L'helgoualc'h" <lhh+ a écrit dans le message de
news:
gmane.linux.debian.user.french a écrit, mardi 4 octobre 2005, à 18:21 :
Bonjour à tous



bonsoir,

J'ai un petit problême avec un script shell que je suis en train de faire
...

En gros ce que je veux faire c'est récupérer dans les fichiers contenant


les
mail d'un serveur mail ( dans /var/mail/* ) la date du plus ancien message
dans la boite ...



A priori, le plus vieux message de chaque boîte devrait être en tête...

for f in /var/mail/*
do
d=`sed -ne '1s/^From +[^ ]*//p;q' "$f"`
[ -n "$d" ] && date "+%s $d $f" -d "$d"
done | sort -n

Si les messages ne sont pas dans l'ordre chronologique,

for f in /var/mail/*
do
sed -ne 's/^From +[^ ]*//p' "$f" |
while IFS="n" read d
do
[ -n "$d" ] && date "+%s $d $f" -d "$d"
done
done | sort -n

PS. pas de % dans les $f, bien sûr.
--
Jacques L'helgoualc'h


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact






--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Edi Stojicevic
> Salut Jacques,

Nikel merci ;-)

Nico



Salut,

Il existe une liste de diffusion spéciale "shellscripting" et on a toutes
les infos pour s'y abonner sur http://debianworld.org/?q=node/12. Tu y
trouveras également pas mal de liens ...

A+


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact