2012-07-06 18 views
8

Sto cercando di eseguire il seguente comando su un file di testo molto grande. Tuttavia, è molto lentoselect -first 1 su un file di grandi dimensioni

((cat largefile.txt | select -first 1).split(",")).count() 

È un'alternativa veloce in PowerShell? Sembra che il comando analizzerà l'intero file, non importa cosa.

risposta

12

di ottenere solo il primo numero x di righe in un file di testo, utilizzare il - parametro totalcount:

((Get-Content largefile.txt -totalcount 1).split(",")).count 
+0

Questo metodo carica prima l'intero file in memoria, prima di prendere la prima linea. – Ten98

9

È peggio di così: caricherà l'intero file e trasformandolo in un array di stringhe.

Utilizzare le librerie native .NET per caricare solo la prima riga:

$reader = [System.IO.File]::OpenText("largefile.txt") 
$line = $reader.ReadLine() 
$reader.Close() 

(preso in prestito da How to process a file in Powershell line-by-line as a stream)

+0

Che dire delle ultime righe o devi solo aspettare che arrivi fino in fondo? – Coops

+0

Questo metodo carica solo la prima riga nella memoria, rendendola molte volte più veloce di Get-Content su file più grandi. – Ten98

Problemi correlati