如何访问 Import-Csv 数组中的特定行?

How To Access Specific Rows in an Import-Csv Array?

我需要将一个大文件上传分成多个并行进程,并希望使用单个 CSV 文件作为输入。 是否可以从 Import-Csv 对象访问行块,如下所示:

$SODAData = Import-Csv $CSVPath -Delimiter "|" |
            Where $_.Rownum == 20,000..29,999 | 
            Foreach-Object { ... }

这种提取的语法是什么? 我正在使用 Powershell 5。

Import-Csv 将文件作为对象数组导入,因此您可以执行如下操作(使用范围运算符):

$csv = Import-CSv $CSVPath -Delimiter '|'
$SOAData = $csv[20000..29999] | ForEach-Object { ... }

另一种方法是使用 Select-Object:

$offset = 20000
$count  = 10000
$csv = Import-Csv $CSVPath -Delimiter '|'
$SODAData = $csv |
            Select-Object -Skip $offset -First $count |
            ForEach-Object { ... }

如果你想避免将整个文件读入内存,你可以将上面的更改为单个管道:

$offset = 20000
$count  = 10000
$SODAData = Import-Csv $CSVPath -Delimiter '|' |
            Select-Object -Skip $offset -First $count |
            ForEach-Object { ... }

但是请注意,使用这种方法您需要多次读取文件以处理多个数据块。