如何访问 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 { ... }
但是请注意,使用这种方法您需要多次读取文件以处理多个数据块。
我需要将一个大文件上传分成多个并行进程,并希望使用单个 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 { ... }
但是请注意,使用这种方法您需要多次读取文件以处理多个数据块。