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