Bonjours,
je me suis fait un script qui indente un fichier de log (celui en cour, 11635 ligne).
Mon soucis est qu'il met un peut 4-5 seconde pour 100 ligne donc les 10 minutes pour le traitement.
En gros, il insère une chaine donnée N fois à un endroit précis.
exemple de chaine "| "
exemple de log
Exemple de résultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 2009/02/04 16:45:02:842 (t@9) BEGIN texte 2009/02/04 16:45:02:842 (t@9) texte 2009/02/04 16:45:02:842 (t@9) BEGIN texte 2009/02/04 16:45:02:842 (t@9) texte 2009/02/04 16:45:02:842 (t@9) END texte 2009/02/04 16:45:02:842 (t@9) texte 2009/02/04 16:45:02:842 (t@9) END texte
Mon script
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 2009/02/04 16:45:02:842 (t@9) BEGIN texte 2009/02/04 16:45:02:842 (t@9) | BEGIN texte 2009/02/04 16:45:02:842 (t@9) | | texte 2009/02/04 16:45:02:842 (t@9) | | BEGIN texte 2009/02/04 16:45:02:842 (t@9) | | | texte 2009/02/04 16:45:02:842 (t@9) | | END texte 2009/02/04 16:45:02:842 (t@9) | | texte 2009/02/04 16:45:02:842 (t@9) | END texte
Une amélioration par 10 serait bien venu, mais une amélioration de façon générale aussi ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 more ~/Tools/indentLog.sh #!/bin/bash N=`wc ~/Logs/$1/$1_current.log | awk '{print $1}'` sep="| " > ~/Logs/$1/$1_current_ind.log tab0=" # " tabs="$tab0" (( n = 0 )) cat ~/Logs/$1/$1_current.log | while read linein do printf "\r> $n/$N " end=`echo $linein | grep "END"` if test -n "$end" then tabs=`echo "$tabs" | sed "s/$sep//"` fi lineout=`echo $linein | sed "s/)/)$tabs/"` echo -e $lineout >> ~/Logs/$1/$1_current_ind.log begin=`echo $linein | grep "BEGIN"` if test -n "$begin" then tabs=`echo "$tabs" | sed "s/$tab0/$tab0$sep/"` fi (( n = $n + 1 )) done echo " Done"
Partager