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


4.13 Stampare le ultime righe

Stampare le ultime n righe invece delle prime è più complesso ma sempre possibile. n è codificato nella seconda riga, prima del punto esclamativo.

Questo script è simile allo script tac in quanto tiene il risultato finale nell’hold space e lo stampa alla fine:

#!/usr/bin/sed -nf

1! {; H; g; }
1,10 !s/[^\n]*\n//
$p
h

Sostanzialmente, lo script prende una finestra di 10 righe e la fa scorrere aggiungendo una riga e cancellando la più vecchia (il comando di sostituzione sulla seconda riga funziona come un comando D ma non riavvia il ciclo).

La tecnica della “finestra scorrevole” è un modo molto potente per scrivere script di sed efficienti e complessi, dal momento che comandi come P richiederebbero una gran quantità di lavoro se implementati manualmente.

Per introdurre la tecnica, che è dimostrata in maniera esauriente nel resto di questo capitolo ed è basata sui comandi N, P e D, vediamo ora un’implementazione di tail usando una semplice “finestra scorrevole.”

Sembra complicato ma di fatto il funzionamento è lo stesso dell’ultimo script: dopo aver inserito il numero di righe appropriato, comunque, non viene più usato l’hold space per salvare la situazione fra una linea e l’altra, e invece vengono usati N e D per far scorrere il pattern space di una riga:

#!/usr/bin/sed -f

1h
2,10 {; H; g; }
$q
1,9d
N
D

Si noti come la prima, la seconda e la quarta riga sono inattive dopo le prime dieci righe di input. Dopo di esse, tutto quello che lo script fa è: uscendo con l’ultima riga in input, accodare la prossima riga in input al pattern space, rimuovere la prima riga dallo stesso.


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