【发布时间】:2017-12-18 09:37:55
【问题描述】:
编辑 1:
所以我已经弄清楚如何将 CSV 2 中的唯一标头附加到 CSV 1。
$header = ($table | Get-Member -MemberType NoteProperty).Name
$header_add = ($table_add | Get-Member -MemberType NoteProperty).Name
$header_diff = $header + $header_add
$header_diff = ($header_diff | Sort-Object -Unique)
$header_diff = (Compare-Object -ReferenceObject $header -DifferenceObject $header_diff -PassThru)
$header 是来自 CSV 1 ($table) 的标题数组。 $header_add 是来自 CSV 2 ($table_add) 的标题数组。 $header_diff 在代码块末尾包含 CSV 2 中的唯一标头。
据我所知,我的下一步是:
$append = ($table_add | Select-Object $header_diff)
我现在的问题是如何将这些对象附加到我的 CSV 1 ($table 1) 对象中?我不太看好 Add-Member 以一种特别好的方式做到这一点。
原文:
这是我尝试合并的两个 CSV 文件的标题。
CSV 1:
Date, Name, Assigned Router, City, Country, # of Calls , Calls in , Calls out
CSV 2:
Date, Name, Assigned Router, City, Country, # of Minutes, Minutes in, Minutes out
快速了解这些文件是什么;这两个文件都包含一组名称的一天的调用信息(日期列的每一行都有相同的日期;这是因为这最终会被发送到一个包含所有日期的主 .xlsx 文件)。直到 Country 的所有列在两个文件中都以相同的顺序包含相同的值。这些文件只是将通话次数和分钟数数据分开。我想知道是否有一种方便的方法可以将不同的列从一个 CSV 移动到另一个。
我尝试过使用类似的东西:
Import-Csv (Get-ChildItem <directory> -Include <common pattern in file pair>) | Export-Csv <output path> -NoTypeInformation
这并没有组合所有匹配的标头并在之后附加唯一的标头。只有处理的第一个文件保留了其唯一的标题。处理的第二个文件在输出中丢弃了所有这些标头和数据。第二个 CSV 中的共享标题数据作为附加行添加。
我描述的失败输出的示例输出:
PS > $small | Format-Table
Column_1 Column_2 Column_3
-------- -------- --------
1 a a
1 b b
1 c c
PS > $small_add | Format-Table
Column_1 Column_4 Column_5
-------- -------- --------
1 x x
1 y y
1 z z
PS > Import-Csv (Get-ChildItem ./*.* -Include "small*.csv") | Select-Object * -unique | Format-Table
Column_1 Column_2 Column_3
-------- -------- --------
1 a a
1 b b
1 c c
1
1
1
我想知道是否可以执行以下算法:
导入-Csv CSV_1 和 CSV_2 以分隔变量
比较 CSV_2 标头和 CSV_1 标头,将 CSV_2 中不同的标头存储到单独的变量中
选择对象所有 CSV_1 标头,与 CSV_2 标头不同
将 Select-Object 输出通过管道传输到 Export-Csv
我唯一能想到的其他方法是逐行执行:
同时导入-Csv
从 CSV_2 中删除所有共享列
将其从 Powershell 用于 CSV 的自定义对象更改为字符串
将 CSV_2 的每一行附加到 CSV_1 的每一行
感觉有点不完善和不灵活(灵活性可能可以通过列/标题的隔离方式来处理,因此附加字符串没有问题)。
【问题讨论】:
-
看看 CookieMonster 的
Join-Object:github.com/RamblingCookieMonster/PowerShell/blob/master/…
标签: powershell csv