首页 > 解决方案 > 使用 PowerShell 根据开始和结束行号参数从 CSV 文件中获取文件头和文件的一部分

问题描述

所以我有一个非常大的 CSV 文件,第一行有列标题。我想将第一行保留为标题,并从文件的中间部分或末尾添加文件的一部分。我也试图从文件中只选择几个列。最后,如果解决方案还将文件分隔符从逗号更改为制表符,那就太好了。

我的目标是一个单行或 2 个解决方案?

非工作代码版本 30 ...

Get-Content -Tail 100 filename.csv | Export-Csv -Delimiter "`t" -NoTypeInformation -Path .\filename_out.csv

我正在尝试更好地掌握 PowerShell。到目前为止,一切都很好,但我还没有做到。但是尝试解决这些挑战正在帮助我(希望其他人)建立一个很好的编码习语集合。(仅供参考 - 由于我们的努力,老板正在尝试 PowerShell。)

标签: powershellfilecsvimportexport-to-csv

解决方案


iRon提供了关键的指针:使用Import-Csv而不是Get-Content允许您从原始文件中检索任意范围作为对象,如果选择通过Select-Object,并再次导出这些对象通过Export-Csv自动包括一个标题行,其列名是输入对象的属性名,如最初派生自输入文件的标题行。

为了选择任意范围的行,组合Select-Object's -Skip-First参数:

  • 要仅从头开始获取行,请使用-First $count

  • 要仅从末尾获取行,请仅使用-Last $count

  • 要获取给定范围内的行,只需使用-Skip $startRowMinus1 -First $rangeRowCount

例如,以下命令10通过提取行30

Import-Csv iarf.csv | 
  Select-Object -Property Id,Name,RecordTypeId,CreatedDate -Skip 9 -First 20 |
    Export-Csv -Delimiter "`t" -NoTypeInformation -Path .\iarf100props6.csv

推荐阅读