使用 PowerShell 在匹配字符串上添加值并输出到新文件
Using PowerShell to add values on matching string and output to a new file
我有一个包含 3 列的平面文件
日期、页数和页数。
每个页面都有该页面的 2 个版本。安全页面和非安全版本(nlbwc)
我希望能够获取文件中的所有条目 添加页数
对于该特定日期,并输出具有通用页面名称的文件
例如,
以下数据
2021-12-06 00:00:00,secure/WebPage1,1806
2021-12-13 00:00:00,secure/WebPage1,1563
2021-12-06 00:00:00,nlbwc/WebPage1,938
2021-12-13 00:00:00,nlbwc/WebPage1,894
2021-12-06 00:00:00,secure/WebPage2,1533
2021-12-13 00:00:00,secure/WebPage2,1351
2021-12-06 00:00:00,nlbwc/WebPage2,450
2021-12-13 00:00:00,nlbwc/WebPage2,360
会产生
2021-12-06 00:00:00,WebPage1,2744 (1806+938)
2021-12-13 00:00:00,WebPage1,2457 (1563+894)
2021-12-06 00:00:00,WebPage2,2744 (1533+450)
2021-12-13 00:00:00,WebPage2,2457 (1351+360)
(根据日期将 secure 和 nlbwc 的 2 个单独值相加)
此输出将转储到 csv
完成此任务的最佳方法是什么?
最诚挚的问候
假设您的数据文件如下所示:
Date,Page,Page Count
2021-12-06 00:00:00,secure/WebPage1,1806
2021-12-13 00:00:00,secure/WebPage1,1563
2021-12-06 00:00:00,nlbwc/WebPage1,938
2021-12-13 00:00:00,nlbwc/WebPage1,894
2021-12-06 00:00:00,secure/WebPage2,1533
2021-12-13 00:00:00,secure/WebPage2,1351
2021-12-06 00:00:00,nlbwc/WebPage2,450
2021-12-13 00:00:00,nlbwc/WebPage2,360
为此你需要使用 Group-Object
两次并循环:
# if the data does not have headers, provide them with parameter
# -Header 'Date','Page','Page Count'
$result = Import-Csv -Path 'D:\Test\data.csv' | Group-Object {($_.Page -split '/')[1]} | ForEach-Object {
$pageName = $_.Name
foreach ($pageGroup in ($_.Group | Group-Object Date )) {
[PsCustomObject]@{
'Date' = $pageGroup.Name
'Page' = $pageName
'Page Count' = ($pageGroup.Group | Measure-Object 'Page Count' -Sum).Sum
}
}
}
# show on screen
$result | Format-Table -AutoSize
# save to new csv file
$result | Export-Csv -Path 'D:\Test\totals.csv' -NoTypeInformation
屏幕上的结果:
Date Page Page Count
---- ---- ----------
2021-12-06 00:00:00 WebPage1 2744
2021-12-13 00:00:00 WebPage1 2457
2021-12-06 00:00:00 WebPage2 1983
2021-12-13 00:00:00 WebPage2 1711
P.S>=。关于总页数
,您在所需输出中出错
我有一个包含 3 列的平面文件 日期、页数和页数。
每个页面都有该页面的 2 个版本。安全页面和非安全版本(nlbwc)
我希望能够获取文件中的所有条目 添加页数 对于该特定日期,并输出具有通用页面名称的文件
例如, 以下数据
2021-12-06 00:00:00,secure/WebPage1,1806
2021-12-13 00:00:00,secure/WebPage1,1563
2021-12-06 00:00:00,nlbwc/WebPage1,938
2021-12-13 00:00:00,nlbwc/WebPage1,894
2021-12-06 00:00:00,secure/WebPage2,1533
2021-12-13 00:00:00,secure/WebPage2,1351
2021-12-06 00:00:00,nlbwc/WebPage2,450
2021-12-13 00:00:00,nlbwc/WebPage2,360
会产生
2021-12-06 00:00:00,WebPage1,2744 (1806+938)
2021-12-13 00:00:00,WebPage1,2457 (1563+894)
2021-12-06 00:00:00,WebPage2,2744 (1533+450)
2021-12-13 00:00:00,WebPage2,2457 (1351+360)
(根据日期将 secure 和 nlbwc 的 2 个单独值相加)
此输出将转储到 csv
完成此任务的最佳方法是什么?
最诚挚的问候
假设您的数据文件如下所示:
Date,Page,Page Count
2021-12-06 00:00:00,secure/WebPage1,1806
2021-12-13 00:00:00,secure/WebPage1,1563
2021-12-06 00:00:00,nlbwc/WebPage1,938
2021-12-13 00:00:00,nlbwc/WebPage1,894
2021-12-06 00:00:00,secure/WebPage2,1533
2021-12-13 00:00:00,secure/WebPage2,1351
2021-12-06 00:00:00,nlbwc/WebPage2,450
2021-12-13 00:00:00,nlbwc/WebPage2,360
为此你需要使用 Group-Object
两次并循环:
# if the data does not have headers, provide them with parameter
# -Header 'Date','Page','Page Count'
$result = Import-Csv -Path 'D:\Test\data.csv' | Group-Object {($_.Page -split '/')[1]} | ForEach-Object {
$pageName = $_.Name
foreach ($pageGroup in ($_.Group | Group-Object Date )) {
[PsCustomObject]@{
'Date' = $pageGroup.Name
'Page' = $pageName
'Page Count' = ($pageGroup.Group | Measure-Object 'Page Count' -Sum).Sum
}
}
}
# show on screen
$result | Format-Table -AutoSize
# save to new csv file
$result | Export-Csv -Path 'D:\Test\totals.csv' -NoTypeInformation
屏幕上的结果:
Date Page Page Count
---- ---- ----------
2021-12-06 00:00:00 WebPage1 2744
2021-12-13 00:00:00 WebPage1 2457
2021-12-06 00:00:00 WebPage2 1983
2021-12-13 00:00:00 WebPage2 1711
P.S>=。关于总页数
,您在所需输出中出错