[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: alternativa ad head|tail?



Lucio Crusca wrote:
Ciao a tutti.

Ho bisogno di isolare un certo numero di righe centrali di un file di testo:

FROM=$((...))
TO=$((...))
SIZE=$(($TO - $FROM))
| head -n $TO | tail -n $SIZE > cutfile

funziona egregiamente, ma, dato che il file di input è grande e il lavoro va
fatto per molte sezioni diverse del file di input, il tutto risulta
piuttosto lento (soprattutto quanto sta isolando sezioni che si trovano
verso il fondo del file, ovviamente). Esiste qualcosa che faccia il lavoro
di head|tail in modo più efficiente? Che ne so, una specie di comando
"middle --from $FROM --to $TO"?

Purtroppo qualsiasi comando dovrebbe leggersi comunque tutto (o quasi) il file,
perche' per contare le righe di testo si deve per forza partire dall'inizio.
L'unica cosa che mi e' venuta in mente e' evitare di scorrerlo due volte e solo
nella parte in cui serve, con qualcosa del genere

{ numriga=0;
  while read riga && (( $numriga < $TO )); do
      (( numriga++ ))
      (( $FROM <= $numriga )) && echo $riga
  done
} < fileditesto

Aggiusta <= e < come ti servono, poi fammi sapere se e' piu' "performante"...
Cmq forse e' il caso di pensare al C, se vuoi un po' piu' di prestazioni.


Cristian



Reply to: