导入-Csv 选择-跳过

问题描述 投票:0回答:3

我有多个 CSV 文件需要合并为一个。每个 CSV 文件中都有一个标题,第二行中有一些我不需要的文本。

我注意到标题的

| Select -Skip 1
声明。现在我想知道如何跳过第三行?

我尝试过这个,但这给了我一个空文件

Get-ChildItem -Path $CSVFolder -Recurse -Filter "*.csv" | %{
  Import-Csv $_.FullName -Header header1, header3, header4 |
    Select -Skip 1 | Select -Skip 2
} | Export-Csv "C:\Export\result.csv" -NoTypeInformation
powershell csv skip import-csv
3个回答
0
投票

Select-Object
不允许您跳过其他行之间的任意行。如果要从文本输入文件中删除特定行,可以使用计数器来执行此操作,例如像这样:

$cnt = 0
Import-Csv 'C:\path\to\input.csv' |
  Where-Object { ($cnt++) -ne 3 } |
  Export-Csv 'C:\path\to\output.csv' -NoType

如果输入 CSV 中的记录没有嵌套换行符,您也可以使用

Get-Content
/
Set-Content
,这可能比
Import-Csv
/
Export-Csv
快一点(因为解析开销较少)。将您要跳过的行号增加一以说明标题行。

$cnt = 0
Get-Content 'C:\path\to\input.csv' |
  Where-Object { ($cnt++) -ne 4 } |
  Set-Content 'C:\path\to\output.csv'

0
投票

试试这个

$i=0;
import-csv "C:\temp2\missing.csv" | %{$i++; if ($i -ne 3) {$_}} | export-csv  "C:\temp2\result.csv" -NoTypeInformation

0
投票

如果您正在执行的所有操作都跳过所有用户案例中的第一行,则只需使用 -skip 3。

Get-Content -Path 'D:\Temp\UserRecord.csv'
# Results
<#
Name     Codes
------- ---------
John    AJFKC,EFUY
Ben    EFOID, EIUF
Alex    OIPORE, OUOIJE
#>


# Return all text after row the Header and row 3
(Get-Content -Path 'D:\Temp\UserRecord.csv') | 
Select -Skip 3

# Results
<#
Ben    EFOID, EIUF
Alex    OIPORE, OUOIJE
#>

另请参阅:

使用 PowerShell 解析文本(1/3)

© www.soinside.com 2019 - 2024. All rights reserved.