top -b -n 1|awk '{if($1=="Cpu(s):"){user=$2; sys=$3; ni=$4; id=$5; wa=$6;
hi=$7; si=$8; st=$9; print user sys ni id wa hi si st}}'|sed
'~s/[a-z%]*//g'|tr ',' ' '
Grazie
Ps. ho usato le variabili perche' cercavo di manipolarle prima di stamparle.
Ovviamente per il risultato attuale non servono
--
************** (.)_(.) *******************
Un amico � uno che sa tutto di te e,
nonostante questo, gli piaci
(E. Hobbard)
> Ragazzi,
> e' una stupidata non bloccante ma non riesco a fare tutto in un unica
> istruzione awk, e devo ricorrere a sed e tr, e ci sto impazzendo.
> Mi date una mano
>
> top -b -n 1|awk '{if($1=="Cpu(s):"){user=$2; sys=$3; ni=$4; id=$5; wa=$6;
> hi=$7; si=$8; st=$9; print user sys ni id wa hi si st}}'|sed
> '~s/[a-z%]*//g'|tr ',' ' '
La sfera di cristallo dice
top -b -n1 | \
awk '$1=="Cpu(s):" {
t=s=""
for(i=2;i<=9;i++){sub(/%.*/,"",$i);t=t s $i;s=OFS}
print t
}'
questa me la devo proprio studiare
Grazie
> top -b -n 1 | awk '{if($1=="Cpu(s):"){
> user=$2; sys=$3; ni=$4; id=$5; wa=$6; hi=$7; si=$8; st=$9;
> print user sys ni id wa hi si st}}' | \
> sed '~s/[a-z%]*//g' | \
> tr ',' ' '
% top -b -n 1 | awk -F"[ ()a-zA-Z,:%]+" '
/^Cpu.s.:/ {for(i=1;i<NF;i++) printf $i" "; print ""}'
4.2 0.7 0.1 94.8 0.1 0.0 0.0 0.0
%
Avete proprio deciso di umiliarmi eh? :-)
Sono riuscito a capire quella proposta da antani, adesso mi studio anche la
tua.
Grazie
> "Giacomo Boffi" <giacom...@polimi.it> ha scritto nel messaggio
> news:86hbsi7...@aiuole.stru.polimi.it...
>> "nameci" <nospam4...@alice.it> writes:
>> % top -b -n 1 | awk -F"[ ()a-zA-Z,:%]+" '
>> /^Cpu.s.:/ {for(i=1;i<NF;i++) printf $i" "; print ""}'
>> 4.2 0.7 0.1 94.8 0.1 0.0 0.0 0.0
> Sono riuscito a capire quella proposta da antani, adesso mi studio
> anche la tua.
in awk il field separator � di default uguale alla regex "[ \t]+"
con l'opzione -F"[ ()a-zA-Z,:%]+" cambi questo default in modo che i
campi siano i numeri decimali sulla tua riga "utile"
il programma dice "quando trovi una riga utile, che inizia con Cpu...,
fai un ciclo sui campi, tranne l'ultimo, e per ogni campo
stampi il suo valore come stringa, concatenato ad uno spazio, ed alla
fine del ciclo stampi un carattere vuoto seguito da un LF"
quello che il programma stampa assomiglia a quanto hai chiesto, in
quanto c'� uno spazio bianco alla fine che non dovrebbe esserci...
ma cos� riesce bello compatto
studiati anche la funzione split e la gsub, puoi risolvere il tuo
problema con ciascuna delle due
per lasciarti qualcosa cui pensare,
% top -b -n 1 | awk -F"[ ()a-zA-Z,:%]+" '/^Cpu.s.:/{NF=NF;print}'
4.6 0.9 0.3 94.2 0.1 0.0 0.0 0.0
%
--
The stories of the street are mine, the Spanish voices laugh.
Oppure:
top -bn1|awk '/^Cpu/&&gsub(/[^0-9. ]/,x)'
o
perl -e'
/^Cpu/and print/[\d\s.]+/g for qx(top -bn1)
'
Dimitre
Grazie delle spiegazioni precise che mi hanno confermato quanto da me
interpretato.
Ho visto che awk ha delle funzioni interne tra le quali quelle che mi
indichi. E' un modo da esplorare :-)
> per lasciarti qualcosa cui pensare,
>
> % top -b -n 1 | awk -F"[ ()a-zA-Z,:%]+" '/^Cpu.s.:/{NF=NF;print}'
> 4.6 0.9 0.3 94.2 0.1 0.0 0.0 0.0
> %
:-)
O caspita.
Cosa fa? Un ciclo implicito sui campi assegnando il numero dei campi letti
alla variabile d'ambiente NF attualizzando ad ogni ciclo la variabile come
definitiva in modo che per la print ad ogni ciclo l'ultimo campo della
stringa risulta quello correntemente in elaborazione e lo stampa?
No,
definisce come field separator il range di caratteri indicato tra [ e ]
dopodich� "forza" la ricostruzione del current record assegnando alla
variable interna (non d' ambiente) NF il suo valore inalterato.
In altre parole:
top -bn1|awk -F'[^0-9. ]' '/^Cpu/&&NF=NF' OFS=
Dimitre
Si questo l'avevo capito anche perche' l'aveva usato nell'esempio precedente
> dopodich� "forza" la ricostruzione del current record assegnando alla
> variable interna (non d' ambiente) NF
Chiedo venia per il termine inappropriato.
> NF il suo valore inalterato.
Come inalterato? Inserisce il campo privato dei carateri di separazione. No?
> top -bn1|awk -F'[^0-9. ]' '/^Cpu/&&NF=NF' OFS=
Si va bene, quanto a fondo nella ferita volete spingere questo coltello? :-(
Allora indichi i separato come i caratteri che voglio estrarre e
ricostruisci la variabile interna (imparo velocemente :-) ) NF con la nuova
composizione del campo (cioe' con i soli caratteri che mi interessano) e
imposti a null il separatore di campi.
Come sono andato?
Ciao
> O caspita. Cosa fa?
a questo ti ha gi� risposto Dimitre...
se lo trovi "The AWK Programming Language" di Aho Weinberger e
Kernigan � un libretto che chi non ha un'educazione formale
sull'informatica pu� leggere con profitto, imvho, superiore alla sola
conoscenza di awk
ciao
--
"It will be rain tonight."
"Let it come down."
lo inserisco nei prossimi acquisti natalizi :-)
>� un libretto che chi non ha un'educazione formale
ehi non sono messo cosi' male :-)
Ciao
No,
NF � number of fields in the current record e in questo caso �
inalterato (non abbiamo cambiato il numero di campi, abbiamo solo
definito il loro contenuto).
Abbiamo fatto:
% print {1..5}\
1 2 3 4 5
% print {1..5}\ | awk NF=NF
1 2 3 4 5
Non:
% print {1..5}\ | awk NF--
1 2 3 4
>> top -bn1|awk -F'[^0-9. ]' '/^Cpu/&&NF=NF' OFS=
>
> Si va bene, quanto a fondo nella ferita volete spingere questo coltello?
> :-(
>
> Allora indichi i separato come i caratteri che voglio estrarre e
> ricostruisci la variabile interna (imparo velocemente :-) ) NF con la
> nuova composizione del campo (cioe' con i soli caratteri che mi
> interessano) e imposti a null il separatore di campi.
Pi� precisamente definisci il separatore e fai in modo che AWK
ricostruisca/ricompili il record corrente utilizzando il valore di OFS.
La ricostruzione/ricompilazione in questo caso � provocata dalla
assegnazione di un valore (qualsiasi, in questo caso il valore corrente)
alla variabile interna NF.
Nel esempio seguente utilizzo la variabile $1 per ottenere lo stesso
comportamento:
% print {1..5}.
1. 2. 3. 4. 5.
% print {1..5}.|awk -F. '$1=$1'
1 2 3 4 5
% print {1..5}.|awk -F. '$1=$1' OFS=+
1+ 2+ 3+ 4+ 5+
Dimitre
> "Giacomo Boffi" <giacom...@polimi.it> ha scritto nel messaggio
> news:867htd5...@aiuole.stru.polimi.it...
>> se lo trovi "The AWK Programming Language" di Aho Weinberger e
>> Kernigan
>
> lo inserisco nei prossimi acquisti natalizi :-)
� straordinariamente caro...
>>� un libretto che chi non ha un'educazione formale
> ehi non sono messo cosi' male :-)
allora sei fortunato, perch� lo trovi in biblioteca
--
"Lord, what fools these mortals be!"
Argh!!! 93 dollari. Ok scherzavo, me lo faccio raccontare :-)
Se posso dire la mia,
il primo libro che suggerisco sempre � Gawk: Effective AWK Programming
di Arnold Robbins (current GNU AWK maintainer).
Ci sono sia la versione gratuita di FSF (gnu.org/manual/gawk/) che
quella a pagamento (tinyurl.com/yhphcpr).
Invece The AWK Programming Language la trovi anche usata su Amazon al
prezzo di $5.97 + le spese di spedizione (tinyurl.com/ycgu6rw).
Dimitre
Di questo tipo e' sempre ben accetta ;-)