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