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
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
Exemple de résultat
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
Mon script
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"
Une amélioration par 10 serait bien venu, mais une amélioration de façon générale aussi ^^