【问题标题】:Merge Files over multiple folders using PowerShell使用 PowerShell 合并多个文件夹中的文件
【发布时间】:2013-09-06 18:08:16
【问题描述】:

我的目录结构如下。

根目录

   Sub_dir1

   Sub_dir2

   ....

这里我在根目录中有多个子文件夹。现在每个子文件夹都包含一个 message.csv 文件。我想追加它们并创建一个新的 csv 文件。

【问题讨论】:

  • 道歉可能是一个愚蠢的问题,但我认为所有的 CSV 都有相同的列?另外,它们中的任何一个都有列标题吗?对答案有影响。

标签: powershell csv


【解决方案1】:

假设所有 CSV 具有相同的列,这样应该可以工作:

$root = 'C:\path\to\Root_dir'
$csv  = 'C:\path\to\output.csv'

Get-ChildItem $root -Filter 'message.csv' -Recurse | % {
  Import-Csv $_.FullName 
} | Export-Csv $csv -NoTypeInformation

要从输出中删除重复项,请尝试以下操作:

$root = 'C:\path\to\Root_dir'
$csv  = 'C:\path\to\output.csv'

Get-ChildItem $root -Filter 'message.csv' -Recurse | % {
  Import-Csv $_.FullName 
} | ConvertTo-Csv -NoTypeInformation | select -Unique | Out-File $csv

【讨论】:

  • 非常感谢您的帮助。您能指导我如何在基于 ID 列合并 csv 文件后选择不同的行吗?
  • 是否要在将结果写入输出文件之前对其进行过滤?如果是这样,你为什么不在你的问题中提到这一点?你的标准是什么?
  • 对不起,我在问题开始时没有提到重复标准,因为我在合并文件后了解了重复错误。在合并的任何阶段都可以删除重复项,只关心性能。合并所有 csv 文件后,合并文件的大小会增长到几 GB。
  • 这里 unique 适用于所有列值相同的多条记录,我需要添加哪些参数来约束唯一 id 值?
  • 您可以使用sort -Unique ID | Export-Csv 代替ConvertTo-Csv | select -Unique | Out-File。但是,如果具有相同 ID 的记录的其他字段不同,您就会以这种方式丢失数据。
猜你喜欢
  • 1970-01-01
  • 2015-06-19
  • 2021-11-22
  • 2022-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多