【问题标题】:powershell: Write specific rows from files to formatted csvpowershell:将文件中的特定行写入格式化的csv
【发布时间】:2018-02-15 09:50:28
【问题描述】:

以下代码为我提供了正确的控制台输出。但我需要它在 csv 文件中:

$array = @{}
$files = Get-ChildItem "C:\Temp\Logs\*"
foreach($file in $files){
    foreach($row in (Get-Content $file | select -Last 2)){
        if($row -like "Total peak job memory used:*"){
            $sp_memory = $row.Split(" ")[5]
            $array.Add(($file.BaseName),([double]$sp_memory))
            break
        }
    } 
}
$array.GetEnumerator() | sort Value -Descending |Format-Table -AutoSize

当前输出(控制台):

所需输出(csv):

为了提高性能,我想避免使用数组并将输出直接写入 csv(不附加)。

提前致谢!

【问题讨论】:

    标签: powershell export-to-csv


    【解决方案1】:

    把你的最后一行改成这个 -

    $array.GetEnumerator() | sort Value -Descending | select @{l='FileName'; e={$_.Name}}, @{l='Memory (MB)'; e={$_.Value }} | Export-Csv -path $env:USERPROFILE\Desktop\Output.csv -NoTypeInformation
    

    这将在您的桌面上为您提供一个名为 Output.csvcsv 文件。 我正在使用Calculated properties 将列标题更改为FileNameMemory (MB),并将$array 的输出通过管道传输到Export-Csv cmdlet。

    只是让您知道,您的变量 $arrayHashtable 类型,它不会存储重复的键。如果需要存储重复的键/值对,可以使用数组。只是建议! :)

    【讨论】:

    • Hashtable 没问题 - 我知道,我为它选择了一个错误的名称 :) 您的方式是在 csv 中输出数据,但列“文件名”和 2Memory (MB)“连接在Excel 中的同一列(“A”)
    • 您如何将数据从csv 传输到excel
    猜你喜欢
    • 1970-01-01
    • 2015-10-04
    • 2012-07-22
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多