在PowerShell中删除百分号并将值转换为CSV文件的整数

时间:2018-05-21 06:11:48

标签: powershell csv

我有一个如下所示的CSV文件:

Host;Service;OK;WARN;CRIT;UNKNOWN;Flapping;H.Down;Downtime;N/A
Server1;DNS;0.00%;0.00%;100.00%;0.00%;0.00%;0.00%;0.00%;0.00%
Server2;Filesystem C:/;0.00%;0.00%;100.00%;0.00%;0.00%;0.00%;0.00%;0.00%
Server2;Filesystem D:/;28.82%;0.00%;70.68%;0.00%;0.00%;0.50%;0.00%;0.00%
Server3;Events;0.00%;0.00%;98.97%;0.00%;0.00%;1.03%;0.00%;0.00%
Server4;W32Time;0.00%;0.00%;100.00%;0.00%;0.00%;0.00%;0.00%;0.00%

我目前正在使用

导入它
$computers = Import-Csv .\foo.csv -Delimiter ";"

我一直在尝试一些不同的事情来尝试清除百分号无效。

最终,我想将每个值作为数字,然后我可以格式化它们,以便任何高于0(或0.0%)的值都可以用颜色格式化。我认为CSV导入是以字符串形式导入所有内容,因此围绕字符串进行数学运算会更加困难,对于包含特殊字符的字符串更是如此。

1 个答案:

答案 0 :(得分:3)

一个显而易见的事情是预处理您的数据文件以删除%标志。例如:

(Get-Content .\data.csv).Replace("%","") | 
    Out-File .\data2.csv -Append

完成此操作后,可以通过将数字转换为数字类型来轻松使用数字,您需要为任何CSV执行数字类型(因为,正如您所说,PowerShell将所有内容视为字符串在这种情况下)。例如:

Import-Csv .\data2.csv -Delimiter ";" |
    ForEach-Object {
        switch([double]$_.CRIT)
        {
            {$_ -lt 75.0} {"CRIT is under 75: $_"}
            default {"CRIT is over 75: $_"}
        }
    }

编辑:包含@LotPings建议的精简版:

(Get-Content .\data.csv).Replace("%","")  |
        ConvertFrom-Csv -Delimiter ";" |
            ForEach-Object {
                switch([double]$_.CRIT)
                {
                    {$_ -lt 75.0} {"CRIT is under 75: $_"}
                    default {"CRIT is over 75: $_"}
                }
        }