Successivo: , Precedente: , Su: Esempi   [Contenuti][Indice]


4.10 Contare le parole

Questo script è quasi uguale al precedente, una volta che ognuna delle parole della riga è stata convertita in una ‘a’ (nello script precedente ogni lettera veniva cambiata in una ‘a’).

Una cosa interessante è che i programmi di wc hanno cicli ottimizzati per ‘wc -c’, perciò sono più lenti nel contare parole che caratteri. Il collo di bottiglia di questo script, invece, è aritmetico, e quindi il conteggio delle parole è più veloce (deve gestire numeri più piccoli).

Ancora una volta, le parti in comune non sono commentate per mostrare l’importanza di commentare gli script di sed.

#!/usr/bin/sed -nf

# Converte le parole in a
s/[ tab][ tab]*/ /g
s/^/ /
s/ [^ ][^ ]*/a /g
s/ //g
# Le accoda all'hold space
H
x
s/\n//
# Da qui in avanti è lo stesso di wc -c.
/aaaaaaaaaa/! bx;   s/aaaaaaaaaa/b/g
/bbbbbbbbbb/! bx;   s/bbbbbbbbbb/c/g
/cccccccccc/! bx;   s/cccccccccc/d/g
/dddddddddd/! bx;   s/dddddddddd/e/g
/eeeeeeeeee/! bx;   s/eeeeeeeeee/f/g
/ffffffffff/! bx;   s/ffffffffff/g/g
/gggggggggg/! bx;   s/gggggggggg/h/g
s/hhhhhhhhhh//g
:x
$! { h; b; }
:y
/a/! s/[b-h]*/&0/
s/aaaaaaaaa/9/
s/aaaaaaaa/8/
s/aaaaaaa/7/
s/aaaaaa/6/
s/aaaaa/5/
s/aaaa/4/
s/aaa/3/
s/aa/2/
s/a/1/
y/bcdefgh/abcdefg/
/[a-h]/ by
p