2012-07-06 11 views
8

Próbuję uruchomić następujące polecenie na bardzo duży plik tekstowy. Jest jednak bardzo powolny:wybierz-pierwsze 1 na dużym pliku

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

Czy jest to alternatywny szybki sposób w grze Power Shell? Wygląda na to, że polecenie skanuje cały plik bez względu na wszystko.

Odpowiedz

12

Aby uzyskać tylko pierwszy x liczbę wierszy w pliku tekstowym, należy użyć - Parametr totalcount:

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

Ta metoda wczytuje cały plik do pamięci, zanim wykona pierwszą linię. – Ten98

9

Gorzej niż to - załaduje cały plik i przekształcić go w tablicy ciąg.

Użyj natywnych bibliotek .NET załadować tylko pierwszej linii:

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

(zapożyczoną z How to process a file in Powershell line-by-line as a stream)

+0

Co z ostatnimi liniami, czy po prostu trzeba poczekać, aż przejdzie do końca? – Coops

+0

Ta metoda ładuje tylko pierwszą linię do pamięci, czyniąc ją wielokrotnie szybszą niż Get-Content na większych plikach. – Ten98

Powiązane problemy