我需要将大型文件上传拆分为多个并行进程,并希望使用单个CSV文件作为输入。
是否可以从Import-Csv
对象访问行块,如下所示:
$SODAData = Import-Csv $CSVPath -Delimiter "|" |
Where $_.Rownum == 20,000..29,999 |
Foreach-Object { ... }
这种提取的语法是什么? 我正在使用Powershell 5。
答案 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 { ... }
请注意,使用此方法,您需要多次读取文件以处理多个数据块。