2012-03-28 5 views

risposta

13

Passaggio 1: head -n nomefile> newfile // ottiene le prime n righe in newfile, ad es. n = 5

Fase 2: Ottenere la dimensione del file enorme, una

Fase 3: Ottenere la dimensione newfile, B

Fase 4: (A/B) * n è pari a circa l'esatto conteggio delle righe

Impostare n su valori diversi, eseguiti alcune volte di più, quindi ottenere la media.

+0

buona idea, grazie. –

+0

Fornisce un'approssimazione * * del numero di righe nel file. Non è possibile ottenere un conteggio esatto senza leggere l'intero file in qualche modo. La stima può essere lontana se le prime righe ** n ** sono più lunghe o più corte della media. E la media dei risultati per valori variabili di ** n ** sembra strana. Il più grande ** n ** che proverai includerà i risultati per tutti i valori più piccoli. È sufficiente effettuare una singola misurazione per alcuni di grandi dimensioni ** n ** in modo migliore rispetto all'approccio mediano suggerito. In ogni caso, i commenti sulla mia risposta indicano che 'wc -l' richiede circa 90 secondi. –

8

L'approccio più rapido è probabilmente wc -l.

Il comando wc è ottimizzato per fare esattamente questo genere di cose. È molto improbabile che qualsiasi altra cosa tu possa fare (oltre a farlo su hardware più potente) sarà più veloce.

Sì, il conteggio delle righe in un file di testo da 5 gigabyte è lento. È un grosso file.

L'unica alternativa sarebbe quella di memorizzare i dati in un formato diverso in primo luogo, forse un database, forse un file con record a lunghezza fissa. Convertire il tuo file di testo da 5 gigabyte in un altro formato sta per prendere almeno come errato di wc -l su di esso, ma è che valga la pena se stai andando a contare molto le linee. È impossibile dire quali sono i compromessi senza ulteriori informazioni.

+0

Per la dimensione di un file di testo semplice, 'wc' ha impiegato un tempo relativamente breve alla prima chiamata per quel file e ~ 2 secondi per le chiamate successive con lo stesso file come input. –

+0

La memorizzazione della cache del file la prima volta spiega questo, vedere il commento di @Ivella qui: http://stackoverflow.com/a/12716620/1959808 –

+0

@johntex: Cosa intendi per "relativamente poco tempo"? –

Problemi correlati