从一个CSV创建多个文件,从一个列中的每个值创建一个文件[Powershell]

时间:2020-03-06 02:33:18

标签: powershell csv automation

我是PowerShell的新手,我在解决如何从一个或多个.csv文件创建时遇到了一个问题,每个文件在一个列中为每个值找到一个文件,其中包含该值中的所有行。

让我用一个例子来解释:

我有此来源CSV:

Source Table

我需要为文件中的每个App创建一个文件。脚本的输出应该是这样的。

App1.csv

App1.csv

App2.CSV

App2.CSV

对于出现在原始CSV中的每个应用,该文件都是一个新文件,其中所有行均具有该值,在本例中为应用。

我想在PowerShell中做到这一点,以便可以自动化,我尝试使用组对象,然后使用值进行foreach,但没有运气。我什至没有遥不可及的找到解决方案。

谢谢您,祝您编程愉快!

2 个答案:

答案 0 :(得分:1)

我没有最优雅的解决方案,但是可以用,我检查了您的文件,但请您下次将文件内容上载为文本,以便于复制。 不要忘记在代码中选择定界符(我通常使用';')

$some=Import-Csv "D:\testdir\file1.csv" -Delimiter ';'|
        Sort-Object header2|
          Group-Object -Property header2

foreach ($i in $some){
  $i.Group| 
    Export-Csv -Delimiter ';' -Encoding UTF8 -NoTypeInformation -Force -Path ("D:\testdir\"+$i.Name+".csv")
}

答案 1 :(得分:0)

导入CSV。

从包含应用名称的列中选择所有唯一值。

浏览应用名称,并获取与应用名称匹配的所有行。

导出为CSV。

$Path = "./MyFile.csv"
$DestinationDir = "./"
$CSV = Import-CSV -Path $Path

$AppNames = $CSV.H2 | Select -Unique

Foreach ($App in $AppNames)
{
    $DestinationPath = Join-Path -ChildPath $App -Path $DestinationDir 
    $CSV | Where {$_.H2 -eq $APP} | Export-Csv -NoTypeInformation -Path $DestinationPath
}

示例CSV:

H1,H2,H3,H4
Data,App1,Data,Data
Data,App1,Data,Data
Data,App1,Data,Data
Data,App2,Data,Data
Data,App2,Data,Data