【问题标题】:Output file and preserve format输出文件并保留格式
【发布时间】:2020-07-01 21:10:31
【问题描述】:

这是我第一次使用 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'

此命令不返回任何结果

【问题讨论】:

  • Get-ContentOut-File 的混合可能会导致编码混乱,除非您使用的是 PowerShell Core。请显示文件的摘录,以清楚地指出您想要完成的任务。 where indust -eq "Tech" 期望有一个名为 indust 的属性。从Get-Content 读取不会产生这样的属性。
  • 如果您的文件是真正的 CSV,使用Import-Csv 阅读可能更有益。如果有一个名为indust 的列标题,您可以使用where 基于该名称进行过滤。如果你的行数据包含较长的字符串,过滤时最好使用-like操作符 --> where indust -like "*Tech*"

标签: powershell where-clause


【解决方案1】:

正如AdminOfThings 指出的那样,使用Import-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+] 中选择 - 见this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多