【问题标题】:Powershell - compare two arrays and write extra data from second array to firstPowershell - 比较两个数组并将第二个数组中的额外数据写入第一个数组
【发布时间】:2021-07-15 18:17:43
【问题描述】:

每个月我都会从我们的电话提供商那里收到一份报告,其中包含所有费用的完整规格。在收到的数据中,我不想为每个电话用户创建有关电话使用情况的报告。 我在 Excell 中解决了这个问题,但想用 Powershell 做出更好的解决方案。但是……问题……

其中一列包含订阅、呼叫类型等数据。该列中总共有大约 100 种不同类型的数据,但我想将它们分成 4 个不同的类别。

我有一个列表,其中包含另一个文件中的所有数据类型和类别,但我找不到一种方法来检查第一个列表中的数据,将它们与第二个列表进行比较,然后将类别作为额外数据写回第一个数组中。在 Excel 中,我为此使用了查找函数。

下面是我想要的示例: 我有一些数据:

  $data1 = @(
   [pscustomobject]@{No='1';Name='Joe';Service='Subscription 1';Price='5'}
   [pscustomobject]@{No='2';Name='Sue';Service='Subscription 2';Price='4'}
   [pscustomobject]@{No='3';Name='Joe';Service='Call Price 1';Price='0,1'}
   [pscustomobject]@{No='4';Name='Sue';Service='Call Price 2';Price='0,2'}
   [pscustomobject]@{No='5';Name='Sue';Service='Call Price 1';Price='0,1'}
   [pscustomobject]@{No='6';Name='Joe';Service='Call Price 2';Price='0,2'})

还有一个类别列表:

  $data2 = @(
   [pscustomobject]@{Service='Subscription 1';Overview='Subscriptions'}
   [pscustomobject]@{Service='Subscription 2';Overview='Subscriptions'}
   [pscustomobject]@{Service='Call Price 1';Overview='Calls'}
   [pscustomobject]@{Service='Call Price 2';Overview='Calls'}
   [pscustomobject]@{Service='Call Price 1';Overview='Calls'}
   [pscustomobject]@{Service='Call Price 2';Overview='Calls'})

我想要一个通过服务将其组合在一起的输出:

No       : 1
Name     : Joe
Service  : Subscription 1
Overview : Subscriptions
Price    : 5

No       : 2
Name     : Sue
Service  : Subscription 2
Overview : Subscriptions
Price    : 4

No       : 3
Name     : Joe
Service  : Call Price 1
Overview : Calls
Price    : 0,1

No       : 3
Name     : Sue
Service  : Call Price 2
Overview : Calls
Price    : 0,2

No       : 3
Name     : Sue
Service  : Call Price 1
Overview : Calls
Price    : 0,1

No       : 3
Name     : Joe
Service  : Call Price 2
Overview : Calls
Price    : 0,2

感谢您的帮助!

【问题讨论】:

标签: powershell


【解决方案1】:

首先从$data2 中的数据创建字典:

$serviceTypes = @{}

$data2 |ForEach-Object { $serviceType[$_.Service] = $_.Overview }

现在您可以使用Select-Object 通过一次查找来解析服务类别:

$usageData = $data1 |Select *,@{Name='Overview';Expression={$serviceType[$_.Service]}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-11
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2016-12-19
    • 1970-01-01
    相关资源
    最近更新 更多