2017-01-23 5 views
0

Ich habe mehrere CSV-Dateien, die zu einem zusammengeführt werden müssen. In jeder einzelnen CSV-Datei gibt es einen Header und in der zweiten Zeile einen Text, den ich nicht brauche.Import-Csv Select -Skip

Ich bemerkte die | Select -Skip 1 Anweisung für die Header. Jetzt habe ich mich gefragt, wie ich die 3. Reihe überspringen kann?

Ich versuchte dies, aber das gibt mir eine leere Datei

Get-ChildItem -Path $CSVFolder -Recurse -Filter "*.csv" | %{ 
    Import-Csv $_.FullName -Header header1, header3, header4 | 
    Select -Skip 1 | Select -Skip 2 
} | Export-Csv "C:\Export\result.csv" -NoTypeInformation 

Antwort

0

Select-Object Sie keine Möglichkeit, beliebige Zeilen zwischen anderen Zeilen zu überspringen. Wenn Sie eine bestimmte Zeile aus einer Texteingabedatei entfernen möchten, können Sie dies mit einem Zähler tun, z. wie folgt aus:

$cnt = 0 
Import-Csv 'C:\path\to\input.csv' | 
    Where-Object { ($cnt++) -ne 3 } | 
    Export-Csv 'C:\path\to\output.csv' -NoType 

Wenn die Datensätze in der CSV-Eingabe Sie haben ein wenig schneller als Import-Csv/Export-Csv (wegen weniger Parsing-Overhead) ist verwenden konnte nicht verschachtelte Zeilenumbrüche Sie auch Get-Content/Set-Content, die wahrscheinlich. Erhöhen Sie die Zeilennummer, die Sie überspringen möchten, um die Kopfzeile.

$cnt = 0 
Get-Content 'C:\path\to\input.csv' | 
    Where-Object { ($cnt++) -ne 4 } | 
    Set-Content 'C:\path\to\output.csv' 
0

versuchen diese

$i=0; 
import-csv "C:\temp2\missing.csv" | %{$i++; if ($i -ne 3) {$_}} | export-csv "C:\temp2\result.csv" -NoTypeInformation