Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 31/03/2018, à 17:37

soupaloignon

[Régle] Anciens fichiers MSN avec timestamp à convertir en date ?

Bonjour à tous,

J'ai de vieux fichiers logs de conversation msn, que j'aimerai récupérer. En l'état ils sont quasi inutilisable, ou du moins c'est prise de tête.

Je pensais donc à faire un script bash pour remettre tout ça en forme ainsi que nettoyer les trucs inutiles. L'idée est de faire une première mise en forme en texte brut, sans formatage, et par la suite une deuxième mise en forme avec formatage, en fichier html.

A coups de sed pas de souci pour virer ou modifier des choses existantes. Ce qui me pose un problème c'est le timestamp. Et là où cela se corse c'est qu'il faudrait 2 affichage différents .

Voila la structure du fichier brut:

|"LRED[Conversation commencée le |"LTIME1258974681]
|"LGRA[|"LTIME1258974681 ] |"LITAPersonne1 :|"LC008040 TexteDeLaConversation
|"LGRA[|"LTIME1258974751 ] |"LITAPersonne1 :|"LC008040 TexteDeLaConversation
|"LGRA[|"LTIME1258974762 ] |"LITAPersonne2 :|"LC813e41 TexteDeLaConversation
|"LGRA[|"LTIME1258974783 ] |"LITAPersonne2 :|"LC813e41 TexteDeLaConversation

Voilà comment doit être le fichier final :
Conversation commencée le lundi 11 novembre 2009
12:11 - Personne1 : TexteDeLaConversation
12:12 - Personne1 : TexteDeLaConversation
12:12 - Personne2 : TexteDeLaConversation
12:13 - Personne2 : TexteDeLaConversation


Pour le premier type d'affichage (Conversation commencée le) c'est donc cette ligne de code :
date -d @1258974681 "+%A %m %B %Y"

Et le deuxième :
date -d @1258974751 "+%H:%M"

Là où je sèche c'est comment réaliser la boucle qui va balayer le fichier, trouver les timestamp, et formater correctement la date suivant l'un ou l'autre type d'affichage.


Si vous avez des idées ou des pistes, je suis preneur wink
Merci d'avance

Dernière modification par soupaloignon (Le 05/04/2018, à 14:23)


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne

#2 Le 01/04/2018, à 07:57

credenhill

Re : [Régle] Anciens fichiers MSN avec timestamp à convertir en date ?

hello

$ awk -F "[][]|[|]|LTIME|LITA|LC......" '/LRED/ {print $3, strftime("%A %m %B %Y", $5)} /LGRA/ {print strftime("%H:%M", $5) " - " $8, $NF}' fichier
Conversation commencée le  Lundi 11 Novembre 2009
12:11 - Personne1 :  TexteDeLaConversation
12:12 - Personne1 :  TexteDeLaConversation
12:12 - Personne2 :  TexteDeLaConversation
12:13 - Personne2 :  TexteDeLaConversation

Dernière modification par credenhill (Le 01/04/2018, à 08:08)

Hors ligne

#3 Le 01/04/2018, à 19:19

soupaloignon

Re : [Régle] Anciens fichiers MSN avec timestamp à convertir en date ?

Merci credenhill,

Une tuerie de ligne de code, impressionnant wink. Qui fonctionne, mais en partie seulement, par ma faute.

Déjà le masque que je t'avais donné est faux. Ce n'est pas ("+%A %m %B %Y) mais ("+%A %d %B %Y). La correction faite, tout marche nickel.

Par contre en testant je me suis aperçu qu'il y avait d'autres cas de figure, que je n'avais pas vu, et donc pas précisé (honte à moi). Ci-dessous le nouveau bloc de texte exemple

|"LRED[Conversation commencée le |"LTIME1258974681]
|"LGRA[|"LTIME1258974681 ] |"LITAPersonne1 :|"LC008040 TexteDeLaConversation
|"LGRA[|"LTIME1258974751 ] |"LITAPersonne1 :|"LC008040 TexteDeLaConversation
|"LGRA[|"LTIME1258977544 ] |"LITAPersonne2 :|"LC813e41 TexteDeLaConversation
|"LGRA[|"LTIME1258977572 ] |"LITAPersonne1 :|"LC008040 TexteDeLaConversation
|"LGRA[|"LTIME1258977583 ] |"LITAPersonne2 :|"LC813e41 TexteDeLaConversation45
|"LGRA[|"LTIME1258977584 ] |"LITAUne erreur est survenue lors de l'envoi du message suivant :|"LRED TexteDeLaConversation45
|"LRED[Vous avez fermé la fenêtre le 23 Nov 2009 12:59:47]

|"LRED[Conversation commencée le |"LTIME1258999063]
|"LGRA[|"LTIME1258999063 ] |"LITAPersonne1 :|"LC008040 TexteDeLaConversation 
|"LGRA[|"LTIME1258999163 ] |"LITAPersonne1 :|"LC008040 TexteDeLaConversation
|"LGRA[|"LTIME1259001765 ] |"LITAPersonne2 :|"LC813e41 TexteDeLaConversation
|"LGRA[|"LTIME1259001774 ] |"LITAPersonne2 :|"LC813e41 TexteDeLaConversation
|"LRED[Vous avez fermé la fenêtre le 23 Nov 2009 19:47:02]

|"LRED[Conversation par message différés commencée le |"LTIME1259055704]
|"LGRA[11/24/09 08:44:23] |"LITAPersonne1 :|"LNOR TexteDeLaConversation
|"LRED[Vous avez fermé la fenêtre le 24 Nov 2009 10:41:59]

|"LRED[Conversation commencée le |"LTIME1259086803]
|"LGRA[|"LTIME1259086803 ] |"LITAPersonne1 :|"LC008040 TexteDeLaConversation
|"LRED[Vous avez fermé la fenêtre le 24 Nov 2009 20:07:57]

1/ à chaque fin de paragraphe (avant la ligne vide) il y a un LRED[Vous avez fermé la fenêtre le etc. Mais la date est déjà correctement formatée, donc il ne faut pas la toucher dans ce cas de figure

2/ un autre cas de figure avec LRED, 1ere ligne du 3 éme paragraphe. Le timestamp est ok pour cette ligne. Par contre il ne faut pas toucher la ligne commençant par |"LGRA qui est en dessous. La date est déjà formaté. Je virerai après le superflu à coup de Sed wink

3/ Est-il possible de conserver les sauts de lignes existants ?


Merci encore pour ton aide...

Dernière modification par soupaloignon (Le 01/04/2018, à 19:20)


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne

#4 Le 02/04/2018, à 12:27

credenhill

Re : [Régle] Anciens fichiers MSN avec timestamp à convertir en date ?

2/ un autre cas de figure avec LRED, 1ere ligne du 3 éme paragraphe. Le timestamp est ok pour cette ligne

je ne vois pas la différence
je définis l'avant dernier champ des lignes LGRA (LCxxxxx LRED LNOR) comme séparateur de champ, il faut que je trouve qqch de plus général si il y en a d'autres

$ awk -f f1.awk fichier
Conversation commencée le  lundi 23 novembre 2009
12:11 - Personne1 :  TexteDeLaConversation
12:12 - Personne1 :  TexteDeLaConversation
12:59 - Personne2 :  TexteDeLaConversation
12:59 - Personne1 :  TexteDeLaConversation
12:59 - Personne2 :  TexteDeLaConversation45
12:59 - Une erreur est survenue lors de l'envoi du message suivant :  TexteDeLaConversation45
Vous avez fermé la fenêtre le 23 Nov 2009 12:59:47

Conversation commencée le  lundi 23 novembre 2009
18:57 - Personne1 :  TexteDeLaConversation 
18:59 - Personne1 :  TexteDeLaConversation
19:42 - Personne2 :  TexteDeLaConversation
19:42 - Personne2 :  TexteDeLaConversation
Vous avez fermé la fenêtre le 23 Nov 2009 19:47:02

Conversation par message différés commencée le  mardi 24 novembre 2009
11/24/09 08:44:23 Personne1 :  TexteDeLaConversation
Vous avez fermé la fenêtre le 24 Nov 2009 10:41:59

Conversation commencée le  mardi 24 novembre 2009
19:20 - Personne1 :  TexteDeLaConversation
Vous avez fermé la fenêtre le 24 Nov 2009 20:07:57
 
$ cat f1.awk
BEGIN {FS="[][]|[|]|LTIME|LITA|LC......|LRED|LNOR"}
/LRED.*commen/ {print $4, strftime("%A %d %B %Y", $6)}
/LRED.*ferm/ {print $4}
!NF {print ""}
/LGRA/ && /[0-9][0-9]\// {print $3, $6, $NF}
/LGRA/ && /LTIME/ {print strftime("%H:%M", $5) " - " $8, $NF}

Dernière modification par credenhill (Le 02/04/2018, à 15:10)

Hors ligne

#5 Le 02/04/2018, à 20:05

soupaloignon

Re : [Régle] Anciens fichiers MSN avec timestamp à convertir en date ?

Bonsoir credenhill, et merci pour ton post

Heu par contre, comme je l'utilise ?
J'ai collé ça en console,

 cat f1.awk
BEGIN {FS="[][]|[|]|LTIME|LITA|LC......|LRED|LNOR"}
/LRED.*commen/ {print $4, strftime("%A %d %B %Y", $6)}
/LRED.*ferm/ {print $4}
!NF {print ""}
/LGRA/ && /[0-9][0-9]\// {print $3, $6, $NF}
/LGRA/ && /LTIME/ {print strftime("%H:%M", $5) " - " $8, $NF} 00.log > 03.log

Mais cela ne donne rien, à part des erreurs dans la console


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne

#6 Le 02/04/2018, à 20:49

Watael

Re : [Régle] Anciens fichiers MSN avec timestamp à convertir en date ?

et tu vas nous inviter pour venir lire sur ton écran ces messages d'erreurs ?
on prendra notre temps, pour ne pas partir avant la soupe à l'oignon, bien sûr ! big_smile


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 02/04/2018, à 21:08

soupaloignon

Re : [Régle] Anciens fichiers MSN avec timestamp à convertir en date ?

Au temps pour moi Watael (je te met une assiette au chaud ? wink)

soupaloignon@soupaloignon-EasyNote-TJ68 ~/06-outils/logiciels-win/echange/Demo-Ubuntu-LG/amsn-ancien/logs-ploum-nettoyage/2009/11Novembre/nouveau dossier $  cat
 f1.awk
cat: f1.awk: Aucun fichier ou dossier de ce type
soupaloignon@soupaloignon-EasyNote-TJ68 ~/06-outils/logiciels-win/echange/Demo-Ubuntu-LG/amsn-ancien/logs-ploum-nettoyage/2009/11Novembre/nouveau dossier $ BEGI
N {FS="[][]|[|]|LTIME|LITA|LC......|LRED|LNOR"}
BEGIN : commande introuvable
soupaloignon@soupaloignon-EasyNote-TJ68 ~/06-outils/logiciels-win/echange/Demo-Ubuntu-LG/amsn-ancien/logs-ploum-nettoyage/2009/11Novembre/nouveau dossier $ /LRE
D.*commen/ {print $4, strftime("%A %d %B %Y", $6)}
bash: erreur de syntaxe près du symbole inattendu « ( »
soupaloignon@soupaloignon-EasyNote-TJ68 ~/06-outils/logiciels-win/echange/Demo-Ubuntu-LG/amsn-ancien/logs-ploum-nettoyage/2009/11Novembre/nouveau dossier $ /LRE
D.*ferm/ {print $4}
bash: /LRED.*ferm/: Aucun fichier ou dossier de ce type
soupaloignon@soupaloignon-EasyNote-TJ68 ~/06-outils/logiciels-win/echange/Demo-Ubuntu-LG/amsn-ancien/logs-ploum-nettoyage/2009/11Novembre/nouveau dossier $ !NF 
{print ""}
bash: !NF: event not found
soupaloignon@soupaloignon-EasyNote-TJ68 ~/06-outils/logiciels-win/echange/Demo-Ubuntu-LG/amsn-ancien/logs-ploum-nettoyage/2009/11Novembre/nouveau dossier $ /LGR
A/ && /[0-9][0-9]\// {print $3, $6, $NF}
bash: /LGRA/: Aucun fichier ou dossier de ce type
soupaloignon@soupaloignon-EasyNote-TJ68 ~/06-outils/logiciels-win/echange/Demo-Ubuntu-LG/amsn-ancien/logs-ploum-nettoyage/2009/11Novembre/nouveau dossier $ /LGR
A/ && /LTIME/ {print strftime("%H:%M", $5) " - " $8, $NF} 00.log > 03.log^C

En fait ce ne sont pas vraiment des erreurs, mais chaque ligne est considérée comme une commande, donc elle y perd ses petits (enfin il me semble)

Dernière modification par soupaloignon (Le 02/04/2018, à 21:11)


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne

#8 Le 02/04/2018, à 21:25

Watael

Re : [Régle] Anciens fichiers MSN avec timestamp à convertir en date ?

ah, mais c'est parce que le code donné exécute la commande cat sur le script; il ne faut pas la taper.
il faut seulement copier le code de f1.awk dans un fichier, et l'exécuter comme montré avec awk -f.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 03/04/2018, à 07:23

credenhill

Re : [Régle] Anciens fichiers MSN avec timestamp à convertir en date ?

la redirection dépend du shell, donc, avec les instructions awk dans le fichier f1.awk

awk -f  f1.awk 00.log > 03.log

Hors ligne

#10 Le 05/04/2018, à 10:53

soupaloignon

Re : [Régle] Anciens fichiers MSN avec timestamp à convertir en date ?

Bonjour,

Désolé, mais je n'ai pu tester le code que ce matin. Il ne fonctionne pas, et j'ai un retour d'erreur en console.

Voila la manip que j'ai fait :
Copie de

cat f1.awk
BEGIN {FS="[][]|[|]|LTIME|LITA|LC......|LRED|LNOR"}
/LRED.*commen/ {print $4, strftime("%A %d %B %Y", $6)}
/LRED.*ferm/ {print $4}
!NF {print ""}
/LGRA/ && /[0-9][0-9]\// {print $3, $6, $NF}
/LGRA/ && /LTIME/ {print strftime("%H:%M", $5) " - " $8, $NF}

dans un fichier qui s'appelle f1.awk

Le fichier à transformer est dans 00.log

Le résultat doit être dans 03.log

J’envoie dans la console

awk -f  f1.awk 00.log > 03.log

Et j'ai ce retour

awk: f1.awk:1: cat f1.awk
awk: f1.awk:1:       ^ syntax error

C'est moi qui ai fait une erreur quelque part ?

Dernière modification par soupaloignon (Le 05/04/2018, à 10:53)


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne

#11 Le 05/04/2018, à 11:19

credenhill

Re : [Régle] Anciens fichiers MSN avec timestamp à convertir en date ?

enlever la ligne cat f1.awk
c'est la commande pour afficher le contenu du fichier

Hors ligne

#12 Le 05/04/2018, à 14:21

soupaloignon

Re : [Régle] Anciens fichiers MSN avec timestamp à convertir en date ?

Un grand merci, ça fonctionne super bien smile

Pour le fun il ne me reste plus qu'à essayer de comprendre ces lignes de code


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne