2012-07-06 3 views
8

Ich versuche, den folgenden Befehl für eine sehr große Textdatei auszuführen. Es ist jedoch sehr langsamWählen Sie -first 1 für eine große Datei

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

Ist eine alternative schnelle Möglichkeit in Powershell? Es scheint, dass der Befehl die ganze Datei scannt, egal was passiert.

Antwort

12

Um nur die ersten x Anzahl der Zeilen in einer Textdatei zu erhalten, verwenden - Totalcount Parameter:

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

Diese Methode lädt zuerst die gesamte Datei in den Speicher, bevor die erste Zeile genommen wird. – Ten98

9

Es ist schlimmer als das - es wird die ganze Datei und laden Sie es in ein String-Array.

die nativen .NET-Bibliotheken verwenden nur die erste Zeile zu laden: die

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

(entlehnt aus How to process a file in Powershell line-by-line as a stream)

+0

Was ist mit den letzten Zeilen oder müssen Sie nur warten, bis es den ganzen Weg geht? – Coops

+0

Diese Methode lädt nur die erste Zeile in den Speicher, wodurch sie bei größeren Dateien um ein Vielfaches schneller ist als Get-Content. – Ten98