I file di registro Apache standard, con dimensioni comprese tra 500 Mb e 2 GB. Ho bisogno di ordinare le linee in loro (ogni riga inizia con una data AAAA-MM-GG HH: mm: ss, in modo che nessun trattamento necessario per l'ordinamentoOrdinare file di testo di grandi dimensioni in PowerShell
La cosa più semplice e più ovvia che viene in mente è
.Get-Content unsorted.txt | sort | get-unique > sorted.txt
sto indovinando (senza aver provato) che facendo questo utilizzando Get-Content
avrebbe preso per sempre nei miei file da 1 GB. non si sa bene il mio modo per aggirare System.IO.StreamReader
, ma io sono curioso di sapere se una soluzione efficace potrebbe essere messo insieme usando quello?
Grazie a chiunque potrebbe avere un'idea più efficiente.
[modifica]
Ho provato questo in seguito, e ci è voluto molto tempo; circa 10 minuti per 400 MB.
Ho provato il comando precedente e in effetti ci è voluto molto tempo (circa 10 minuti su 460 MB), e il risultato finale non era quello che mi serviva, più il file di destinazione ('sorted.txt') aveva dimensioni doppie della fonte. –
Le differenze di dimensioni sono probabilmente dovute a diverse codifiche utilizzate. Sostituendo '> sorted.txt' con qualcosa come' | Set-Content sorted.txt' potrebbe fare il trucco, altrimenti potresti provare '| Out-File sorted.txt -Encoding '. –
notjustme
Utilizzando il tuo suggerimento '| Set-Content sorted.txt' ha aiutato a risolverlo correttamente, ma è ancora piuttosto lento. Aggiungere '-ReadCount 5000' dopo che 'Get-Content' rende è molto più veloce, ma l'ordinamento è rotto. Sto indovinando, per ordinare correttamente, dobbiamo leggere riga per riga, piuttosto che un blocco alla volta ... Vorrei che ci fosse un modo più efficiente. –