【问题标题】:Merge CSV files with filtering通过过滤合并 CSV 文件
【发布时间】:2015-11-10 12:37:18
【问题描述】:

我前段时间开始使用 PowerShell,以过滤我的一台服务器正在创建的一些日志。

单个日志是文本文件中的 CSV,其中第一行是有关创建它的过程的一些信息。标题在第 2 行,实际内容在第 3 行。大约有 15 个属性,但我只需要其中几个。

以下是对我来说完美适用于一个文件的方法:

Import-csv file.txt | Select-Object -Skip 1 -Property prop1, prop2, prop3, prop4, prop5 | Export-csv result.csv -NoTypeInformation

但是,无论我尝试对多个文件使用什么(比如说,所述文件夹中的所有 .txt 文件,因为日志是每天创建的,并按文件夹分组),它都不适合我,我怀疑这是因为第一行不同,我尝试以相同的方式跳过它,但是我得到空的合并 CSV 文件,只有 prop1 作为第一列

感谢任何帮助,谢谢!

【问题讨论】:

    标签: csv powershell


    【解决方案1】:

    如果标题实际上在第二行,而不是第一行,那么你应该这样做

    Get-Content file.txt | Select-Object -Skip 1 | ConvertFrom-Csv | Export-Csv result.csv -NoTypeInformation
    

    因为这会在第一行被解析为 CSV 之前去掉它。

    如果你想以相同的方式合并多个文件,你可以这样做:

    Get-ChildItem *.txt | ForEach-Object {
        Get-Content $_ | Select-Object -Skip 1 | ConvertFrom-Csv
    } | Export-Csv result.csv -NoTypeInformation
    

    【讨论】:

    • 这很有帮助,但是当我尝试应用以下内容时:[code] (Get-ChildItem *.txt | ForEach-Object { Get-Content $_ | Select-Object -Skip 1 -Property prop1 , prop2, prop3 | ConvertFrom-Csv } | Export-Csv result.csv -NoTypeInformation) 它基本上没有给我我想要的东西。当然,然后我可以获取 result.csv 并在下一行执行 Select-Object by property
    • 您可以将所需的属性添加到管道中的select 调用中。无需再次导入写入的文件。
    • 这对我不起作用,当我添加 Select-Object -Skip 1 -Property prop1, prop2, prop3 时,我得到一个废话 CSV
    猜你喜欢
    • 2017-11-27
    • 2020-05-08
    • 2021-12-11
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多