【问题标题】:Import-Csv Select -Skip导入-CSV 选择-跳过
【发布时间】:2017-01-23 15:27:19
【问题描述】:

我有多个 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


    【解决方案1】:

    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'
    

    【讨论】:

      【解决方案2】:

      试试这个

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

      【讨论】:

        【解决方案3】:

        如果您所做的一切都是在所有用户案例中跳过第一行,只需使用 -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
        #>
        

        另见:

        Parsing Text with PowerShell (1/3)

        【讨论】:

          猜你喜欢
          • 2013-04-08
          • 2021-10-28
          • 1970-01-01
          • 2014-01-05
          • 1970-01-01
          相关资源
          最近更新 更多