it-swarm.com.de

PowerShell: Wie zählt man die Anzahl der Zeilen in der CSV-Datei?

Wie kann ich die Anzahl der Zeilen in einer CSV-Datei mit Powershell zählen? Ich habe so etwas ausprobiert

Get-Content -length "C:\Directory\file.csv"

oder

(Get-Content).length "C:\Directory\file.csv"

diese führen jedoch zu einem Fehler.

16
jrara

Leiten Sie es an das Measure-Object-Cmdlet

Import-Csv C:\Directory\file.csv | Measure-Object
26
Shay Levy

Get-Content und Measure-Object eignen sich gut für kleine Dateien, aber beide sind mit Speicher sehr ineffizient. Ich hatte echte Probleme mit großen Dateien.

Beim Zählen von Zeilen in einer 1-GB-Datei mit einer der beiden Methoden verschlang Powershell den gesamten verfügbaren Speicher auf dem Server (8 GB) und begann dann mit dem Paging auf die Festplatte. Ich habe es über eine Stunde verlassen, aber es wurde immer noch auf die Festplatte geschrieben, also habe ich es getötet.

Die beste Methode, die ich für große Dateien gefunden habe, ist IO.StreamReader zu verwenden, um die Datei von der Festplatte zu laden und jede Zeile mit einer Variablen zu zählen. Dies hält den Speicherverbrauch auf sehr vernünftige 25 MB und ist viel, viel schneller. Es dauert etwa 30 Sekunden, um Zeilen in einer 1-GB-Datei zu zählen oder ein paar Minuten für eine 6-GB-Datei. Es frisst niemals unverhältnismäßig viel RAM, egal wie groß Ihre Datei ist:

[int]$LinesInFile = 0
$reader = New-Object IO.StreamReader 'c:\filename.csv'
 while($reader.ReadLine() -ne $null){ $LinesInFile++ }

Das obige Snippet kann an beliebiger Stelle eingefügt werden, wo Sie get-content oder measure-object verwenden würden. Beziehen Sie sich einfach auf die $ LinesInFile-Variable, um die Zeilenanzahl der Datei abzurufen.

33
Ten98

Allgemein (csv oder nicht)

@(Get-Content c:\file.csv).Length

Wenn die Datei nur eine Zeile hat, schlägt sie fehl. (Sie benötigen das @ - Präfix ... ansonsten zählt die Datei nur die Anzahl der Zeichen in dieser Zeile, wenn die Datei eine Zeile hat.

Get-Content c:\file.csv | Measure-Object -line

Beide schlagen jedoch fehl, wenn ein Datensatz mehr als eine Zeile enthält. Dann importiere csv besser und messe:

Import-Csv c:\file.csv | Measure-Object | Select-Object -expand count
7
stej

(Import-Csv C:\Directory\file.csv).count ist der einzige von diesen. 

Ich habe alle anderen Vorschläge auf einer CSV mit 4781 Zeilen ausprobiert, und alle außer dieser haben 4803 zurückgegeben.

0
devonuto

Du kannst es versuchen 

(Import-Csv C:\Directory\file.csv).count

oder 

$a=Import-Csv C:\Directory\file.csv
$a.count
0
julien

Sie können in Powershell einfach den Befehl "Unix like" verwenden.

Wenn Sie die Datei test.csv erstellen, lautet der Befehl zum Abrufen der Zeilenzahl

gc test.csv | Measure-Object
0
Sandeep Bharani