Re: alternativa ad head|tail?
On 4/19/05, Cristian Versari <cversari@csr.unibo.it> 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
Reply to: