如何将值从 Hash Table 转换为不同的列?
How to transform values from a Hash Table to a different columns?
我是 Power 的新手 Shell 所以我很难理解对某个操作使用哪个命令。
问题: 我有一个散列 table,其中每个参数在组成字段 VALUE 的字符串中可以有 4 个不同的词。例如:
$table:
Name Value
----- --------
parameter 1 F15 STK15
parameter 2 STK15
parameter 3 GP F15 STK15
如您所见,table有3个参数,每个参数值都是一个字符串,可以由3个不同的词组成:STK F15和GP。
我真正需要的是在 4 个不同的列中将此散列 table 导出到 EXCEL:
NAME GP STK15 F15
所以在EXCEL中会有4列:
NAME GP STK15 F15
parameter1 NULL STK15 F15
and so on.
我不知道该怎么做,管道 | out-GridView 或其他任何东西。
要是能把字符串分成3列就完美了。有人可以帮我吗?
您可以执行以下操作:
$table = @{parameter1="F15 STK15";parameter2="STK15";parameter3="GP F15 STK15"}
$outArray = @()
foreach($entry in $table.GetEnumerator()) {
$o = new-object PSCustomObject
$o | Add-Member -notepropertyName "NAME" -notepropertyvalue $entry.name
"F15","STK15","GP" | % {
if($entry.Value -match $_) {
$o | Add-Member -notepropertyname "$_" -notepropertyvalue "$_"
}
else {
$o | Add-Member -notepropertyname "$_" -notepropertyvalue "NULL"
}
}
$outArray += ,$o
}
遍历 table 并检查您要识别的每个数据是否匹配。为 hashtable 中的每个值创建一个自定义对象,并用名称、所需数据以及每个数据是否匹配来填充它。然后将对象追加到数组中。
然后你就有了这样一个对象:
[PS] > $outArray | ft -auto
NAME F15 STK15 GP
---- --- ----- --
parameter2 NULL STK15 NULL
parameter1 F15 STK15 NULL
parameter3 F15 STK15 GP
并且您可以将其转换为 csv
格式以导出到 Excel;
[PS] > $outArray | sort -Property NAME | ConvertTo-Csv -NoTypeInformation
"NAME","F15","STK15","GP"
"parameter1","F15","STK15","NULL"
"parameter2","NULL","STK15","NULL"
"parameter3","F15","STK15","GP"
我是 Power 的新手 Shell 所以我很难理解对某个操作使用哪个命令。
问题: 我有一个散列 table,其中每个参数在组成字段 VALUE 的字符串中可以有 4 个不同的词。例如:
$table:
Name Value
----- --------
parameter 1 F15 STK15
parameter 2 STK15
parameter 3 GP F15 STK15
如您所见,table有3个参数,每个参数值都是一个字符串,可以由3个不同的词组成:STK F15和GP。
我真正需要的是在 4 个不同的列中将此散列 table 导出到 EXCEL:
NAME GP STK15 F15
所以在EXCEL中会有4列:
NAME GP STK15 F15
parameter1 NULL STK15 F15
and so on.
我不知道该怎么做,管道 | out-GridView 或其他任何东西。
要是能把字符串分成3列就完美了。有人可以帮我吗?
您可以执行以下操作:
$table = @{parameter1="F15 STK15";parameter2="STK15";parameter3="GP F15 STK15"}
$outArray = @()
foreach($entry in $table.GetEnumerator()) {
$o = new-object PSCustomObject
$o | Add-Member -notepropertyName "NAME" -notepropertyvalue $entry.name
"F15","STK15","GP" | % {
if($entry.Value -match $_) {
$o | Add-Member -notepropertyname "$_" -notepropertyvalue "$_"
}
else {
$o | Add-Member -notepropertyname "$_" -notepropertyvalue "NULL"
}
}
$outArray += ,$o
}
遍历 table 并检查您要识别的每个数据是否匹配。为 hashtable 中的每个值创建一个自定义对象,并用名称、所需数据以及每个数据是否匹配来填充它。然后将对象追加到数组中。
然后你就有了这样一个对象:
[PS] > $outArray | ft -auto
NAME F15 STK15 GP
---- --- ----- --
parameter2 NULL STK15 NULL
parameter1 F15 STK15 NULL
parameter3 F15 STK15 GP
并且您可以将其转换为 csv
格式以导出到 Excel;
[PS] > $outArray | sort -Property NAME | ConvertTo-Csv -NoTypeInformation
"NAME","F15","STK15","GP"
"parameter1","F15","STK15","NULL"
"parameter2","NULL","STK15","NULL"
"parameter3","F15","STK15","GP"