On 4/19/05, Cristian Versari <[EMAIL PROTECTED]> wrote:
> Tocca studiarsi pure awk!
> C'e' da dire pero' che in questo modo si legge comunque tutto
> il file, anche nel caso in cui le righe da selezionare siano subito
> all'inizio. Questo dovrebbe ovviare:
> 
> awk "{ if (NR <= $TO) { if (NR > $FROM) print } else { exit } }" filediinput

Non funziona mica!!
Comunque per non leggere tutto il file basta dare una passata di gcc a questo:

#include <stdio.h>
int main(int argc, char *argv[])
{
        int start=atoi(argv[1]);
        int to=atoi(argv[2]);
        char *filename=argv[3];
        FILE *fp;
        fp=fopen(filename,"r");
        char data[8192];
        long unsigned int giro=0;
        while(fgets(data,8192,fp))
        {
                if(giro >= start) break;
                else giro++;
        }
        while(fgets(data,8192,fp))
        {
                if(giro < to)
                {
                        printf("%s",data);
                        giro++;
                }
                else break;
        }
        fclose(fp);
return 0;
}

...dovrebbe bastare. 
Non conosco per niente il c, ho iniziato da un paio di giorni (davvero!),
quindi qualsiasi ottimizzazione aggiuntiva mi farebbe piacere...
Non ho messo nessun controllo sugli input e sull'apertura del file: 
cos� � pi� bello :)
./bin 10 100 /grosso
cat /grosso | ./bin 10 100 /dev/stdin

Rispondere a