Powershell 输出文件并保留格式

Powershell 输出文件并保留格式,powershell,where-clause,Powershell,Where Clause,这是我第一次使用powershell,我有一个包含25个变量的大型csv文件。我想使用一个变量(indust)进行过滤,并保留原始文件的格式。我试过下面的两个命令 Get-Content 'C:\week1_industry.csv' | Select-String "Tech" |Out-File 'C:\new\week1_filtered.csv' 此命令返回输出文件,其中包含不属于技术行业但包含“tech”一词的观察结果,变量全部分组在一起,但分成四行,而不是原始

这是我第一次使用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'
此命令不返回任何结果。

正如所指出的,使用此命令将CSV文件解析为(
[pscustomobject]
)对象是有意义的,它允许您按特定属性(CSV列)的值进行筛选:

注:

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

  • 默认为双引号引用所有字段值-在Windows PowerShell中始终如此,但您可以在PowerShell[Core,v6+]中进行选择-请参阅


除非您使用的是PowerShell Core,否则将
获取内容
输出文件
混用的可能性将扰乱编码。请出示文件摘录,清楚地指出你想要完成的任务
其中indust-eq“Tech”
希望有一个名为
indust
的属性。从
Get Content
读取不会产生这样的属性。如果您的文件确实是CSV,那么使用
Import CSV
读取可能会更有益。如果有一个名为
indust
的列标题,您可以使用
where
根据该名称进行筛选。如果行数据包含更长的字符串,则在筛选-->
时最好使用
-like
运算符,其中indust-like“*Tech*”
Import-Csv C:\week1_industry.csv |
  Where-Object indust -like *tech* |
    Export-Csv -NoTypeInformation -Encoding Utf8 C:\new\week1_filtered.csv