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

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: