首页 > 解决方案 > 输出文件并保留格式

问题描述

这是我第一次使用 powershell,我有一个包含 25 个变量的大型 csv 文件。我想使用一个变量(indust)进行过滤并保留原始文件的格式。我尝试了以下两个命令;

Get-Content  'C:\week1_industry.csv' | Select-String "Tech" |Out-File 'C:\new\week1_filtered.csv'

此命令返回输出文件,包括不属于技术行业但包含单词“tech”的观察结果,变量全部组合在一起但分为四行,而不是原始文件中的 25 个不同变量

Get-Content  'C:\week1_industry.csv' | where indust -eq "Tech" |Out-File 'C:\new\week1_filtered.csv'

此命令不返回任何结果

标签: powershellwhere-clause

解决方案


正如AdminOfThingsImport-Csv指出的那样,将 CSV 文件解析为 ( [pscustomobject])对象是有意义的,它允许您按特定属性(CSV 列)的值进行过滤:

Import-Csv C:\week1_industry.csv |
  Where-Object indust -like *tech* |
    Export-Csv -NoTypeInformation -Encoding Utf8 C:\new\week1_filtered.csv

笔记:

  • 如果您使用的是 PowerShell Core (v6+),-NoTypeInformation则不需要,并且 - 假设您要创建 UTF-8 编码文件 - 也不需要-Encoding Utf8不幸的是, Windows PowerShell(最高 v5.1 的版本)默认为 ASCII(!) 编码。

  • Export-Csv默认情况下对所有字段值进行双引号- 在 Windows PowerShell 中总是如此,但您可以在PowerShell [Core, v6+]中选择- 请参阅此答案


推荐阅读