【问题标题】:Merge 2 CSV Files with Powershell using Import-Excel使用 Import-Excel 将 2 个 CSV 文件与 Powershell 合并
【发布时间】:2020-03-12 16:07:40
【问题描述】:

我有 2 个包含不同信息的 CSV 文件。两个文件中有一列相似。我想通过检查 ID 列来合并这两个文件,以获取一个包含两个文件中所有信息的新文件。所以应该是这样的:

文件A

Column 1 = ID
Column 2 = Text
Column 3 = other Text

文件 B

Column 1 = ID
Column 2 = some other text

我现在想使用 powershell 和“import-excel”模块合并它们以获得一个新的 csv:

文件 C

Column 1 = ID
Column 2 = Text
Column 3 = other text
Column 4 = some other text

【问题讨论】:

  • 您好,欢迎您,您尝试了哪些方法,出了什么问题?
  • 其实我试图用谷歌搜索什么或如何合并它们,但我没有找到任何有用的东西。每当我尝试用谷歌搜索“Import-Excel”时,我都会得到很多与 excel 相关的链接,但我有两个要合并的简单文本文件。
  • 试试Merge-Csv
  • 或使用Join-ObjectImport-Csv .\FileA.csv | Join-Object (Import-Csv .\FileB.csv) -On Id | Export-Excel .\FileC.xlsx,另见:In Powershell, what's the best way to join two tables into one?
  • 感谢它运行良好且易于使用。

标签: powershell csv


【解决方案1】:

有多种方法可以关联 2 个(或更多)数据集,但在 PowerShell 中最常见的可能是找到一个共同且唯一的属性,并使用哈希表将一个与另一个关联起来。

假设您有 ImportExcel 模块;这是一个基于您提供的有限信息的简单示例:

我创造了:

FileA:
ID   Text1          Tex2
1    something1.1   something2.1
2    something2.1   something2.2

FileB:
ID   Text3
1    SoemthingElse
2    SomethingElse2
$FileA      = 'c:\temp\fileA.csv'
$FileB      = 'c:\temp\fileB.csv'
$MergeFile  = 'c:\temp\FileA_BMerged.xlsx'
$FileB_Hash = @{}

# Create a hash table from the data in FileB indexed on the ID column.
Import-Csv -Path $FileB |
ForEach-Object{ $FileB_Hash.Add( $_.ID, $_) }

# Now Import FileA via Import-Csv and correlate the data using the ID to tie the 
# 2 sets together.
#
# Notice the use of Select-Object with a calculated property.
Import-Csv -Path C:\temp\FileA.csv |
Select-Object *,@{Name = 'Text3'; Expression = { $FileB_Hash.($_.ID).Text3 } } |
Export-Excel -Path $MergeFile

Export-Excel 是最后一个也是最不显眼的部分,它只是简单地将在管道步骤中创建的对象导出到 Excel 工作表中。

您必须对字段名称敏感。确保您的密钥是唯一的,否则您将不得不以不同的方式处理。基本原则是当您遇到第一个集合中的 ID 时,您可以使用它轻松引用第二个集合中的对象,然后使用该数据扩展第一个集合中的数据。

我们可以用不同的方式混合它,包括不使用任何一个集合作为基础,而是简单地创建一个 PSCustomObjects 集合。但是主要的主体应该是相似的。

【讨论】:

  • 非常感谢您的回答。我稍后会尝试一下。只是要清楚。我的文件中的列 ID 在两个文件中都匹配。所以我想检查两个文件中的 ID 以将数据放在一起。我希望到目前为止这将起作用。谢谢!
  • 好的,让我知道。我还要指出 cmets 中提到的其他 2 个解决方案非常好。
  • 我在 poowershell 中尝试了 merge-csv,这个工具在 powershell 中非常简单和强大。谢谢!
猜你喜欢
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 1970-01-01
  • 2017-12-19
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多