如何访问导入Csv数组中的特定行?

如何访问导入Csv数组中的特定行?,csv,powershell,powershell-5.0,Csv,Powershell,Powershell 5.0,我需要将一个大文件上传拆分为多个并行进程,并希望使用单个CSV文件作为输入。 是否可以从导入Csv对象访问行块,如下所示: $SODAData = Import-Csv $CSVPath -Delimiter "|" | Where $_.Rownum == 20,000..29,999 | Foreach-Object { ... } 这种提取的语法是什么? 我使用的是Powershell 5。导入Csv将文件作为对象数组导入,因此您可以执行

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

$SODAData = Import-Csv $CSVPath -Delimiter "|" |
            Where $_.Rownum == 20,000..29,999 | 
            Foreach-Object { ... }
这种提取的语法是什么?
我使用的是Powershell 5。

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

另一种方法是使用
选择对象

$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 { ... }

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

@Barry请记住索引是以零为基的,因此excel中的第2000行是数组中的1999行。:-)杰出的很好用!Thx@Ansgarde奇怪的是,@Frode,从$csv[20..29]中提取的第一行是第22行?csv文件中有一个标题…没错。使用
导入Csv
时,标题行成为对象属性的名称,因此索引20是数据行21或第22行。
$offset = 20000
$count  = 10000
$SODAData = Import-Csv $CSVPath -Delimiter '|' |
            Select-Object -Skip $offset -First $count |
            ForEach-Object { ... }