合并来自不同zip存档的具有相同文件名的csv文件

时间:2014-02-20 17:33:11

标签: powershell csv merge zip

这是我的情况:

我有多个zip档案,文件名如20130101_001.zip,20130102_001.zip,20130103_001.zip等。

每个档案都包含具有相同名称的csv文件: file1.csv,file2.csv,file3.csv(这些文件不一样,但它们在所有档案中都有相同的名称)

我在ETL过程中使用这些文件,我想解压缩所有存档并将这些文件合并在一起,因此我只需运行一次该过程。 如果有一种方法这样做,所以文件没有重复的记录,这将是伟大的,但如果无法实现,我会使用ETL工具删除它们。

这应该在Windows中完成,我没有语言偏好。

2 个答案:

答案 0 :(得分:1)

查看cmdlet ConvertFrom-Csv和ConvertTo-Csv。它们允许您将csv转换为PowerShell对象数组,反之亦然。

语法非常简单:

$csvObject1 = Get-Content $pathToCSVFile | ConvertFrom-Csv 

对要处理的任何csv文件重复此操作,然后可以在PowerShell中执行所需的任何逻辑以合并它们。完成后,使用:

$csvOutputObject | ConvertTo-Csv -NoTypeInformation | Set-Content $pathToOutputCSVFile

答案 1 :(得分:0)

感谢您的回复,最终我在没有cmdlet的情况下解决了这个问题。

我使用7zip命令解压缩所有文件,然后使用此批处理脚本合并文件:

setlocal
set first=1
>pro.txt (
  for %%F in (file1*.csv) do (
    if defined first (
      type "%%F"
      set "first="
    ) else more +1 "%%F"
  )
)

我有大约20个文件,所以我为每个文件重复这个循环。 稍后我使用SyncSort

规范化记录