Powershell - import-csv数据的进一步处理

时间:2016-03-04 01:30:59

标签: csv powershell

我设法使用以下方法从.csv文件导入-csv数据:

import-csv -Delimiter "`t"-Header @("planid","partnb","id","type","idsymbol","actual") data.txt | Where-Object {$_.ID -eq "057 L13" -or $_.ID -eq "047 L70.6"}

结果为:

planid   : TL_QL FRT Knuckle RH 2WD CNC
partnb   : M10   4.1   242
id       : 047 L70.6
type     : Hodn-X
idsymbol : xValue
actual   : 70.7187445

planid   : TL_QL FRT Knuckle RH 2WD CNC
partnb   : M10   4.1   242
id       : 057 L13
type     : Hodn-Z
idsymbol : zValue
actual   : 13.0685455

现在我需要根据实际值执行一些操作(运行脚本)。 (例如,如果比这更大或更大,那么......)这样做的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您应该将导入的数据存储在变量中:

$dataset = import-csv -Delimiter "`t"-Header @("planid","partnb","id","type","idsymbol","actual") data.txt | Where-Object {$_.ID -eq "057 L13" -or $_.ID -eq "047 L70.6"}

此后,根据您对数据的了解,您可以选择一些选项。

如果您知道要匹配的rownumbers,您可以访问它并直接检查属性并执行代码,例如:

# Code to check if property id of row 3 equals a specific id or planid contains TL_QL
if($dataset[2].id -eq "057 L13" -or $dataset[2].planid -match "TL_QL"){ 
    # Your code to do something 
}

如果您不知道该行并希望迭代每个对象,请执行以下操作:

# Improved for readability; you could use $_ directly
$dataset|Foreach-object { 
      $row = $_;
      if($row.id -eq "057"  -or $row.planid -match "TL_QL"){
        # do something
      }
}

您可以将-and -or运算符与逻辑运算符(如-eq,-lt,-gt,-match,-nomatch等)混合使用。

我假设您的问题是,您希望将“actual”属性与某个int / double值匹配。然后,您可能希望使用例如-lt或-gt。示例:$ row.actual -lt 70(如果值小于70)。

有关逻辑运算符的详细信息,请参阅about_logical_operators或此链接:https://technet.microsoft.com/en-us/library/hh847789.aspx