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

时间:2016-05-19 20:27:01

标签: csv powershell powershell-v5.0

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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