[Linux-Biella] script di parsing

stefano porrino linux@bilug.linux.it
Thu, 14 Feb 2002 17:30:27 +0100


CIARROCCHI Paolo wrote:
> 
> Ciao a tutti,
> devo fare uno script per estrarre alcune informazioni da un file simile a
> questo:
> 
> memory  20
> 0.15user 0.11system 0:00.27elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
> 0inputs+0outputs (95major+10275minor)pagefaults 0swaps
> cat: /proc/comp_cache_stat: No such file or directory
> memory  40
> 0.49user 0.39system 0:00.87elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
> 0inputs+0outputs (95major+20535minor)pagefaults 0swaps
> cat: /proc/comp_cache_stat: No such file or directory
> memory  60
> 0.69user 0.68system 0:01.37elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
> 0inputs+0outputs (95major+30795minor)pagefaults 0swaps
> cat: /proc/comp_cache_stat: No such file or directory
> 
> Devo ottenere un file che contiene il valore vicino a memory ed
> il valore relativo a elapsed e CPU.
> 
> L'output dovrebbe essere cosi
> 
> 20 00.27
> 40 00.87
> 60 01.37
> 
> e
> 20 95
> 40 100
> 60 99
> 
> In pratico voglio fare un grafico dei risultati con gnuplot.
> 
> Suggerimenti ?
> 
> --

prova un po' qui:
#!/usr/local/bin/tclsh

# apre file di input e lo legge tutto d'un fiato
set f [open /tmp/paolo]
set list [split [read $f] \n]
close $f

# apre un altro file per l'output
set f [open /tmp/risultati w+]
foreach el $list {
    if {[lindex $el 0]=="memory"} {
         set risultato [lindex $el 1]
    }
    if {[set iniz [string last "elapsed" $el]]>=0} {
        set fine [string last "\%" [string range $el $iniz end]]
        lappend risultato [string range $el [expr $iniz+8] [expr
$fine+$iniz-1!
        puts $f $risultato
    }
}
close $f

spero faccia quello che chiedi ; )
Ciao

-- 
Stefano Porrino <stefano@porrino.it>
<http://www.porrino.it>