我是PS新手,感谢您的耐心等候。
我正在尝试从(2)个单独的CSV文件中获取数据,然后将它们转储到具有(2)列的新CSV中。对于(1)这样做很容易,但是我不知道该怎么做。
这很完美:
导入CSV C:\ File1.csv |选择“员工” |导出CSV-路径D:\ Result.csv -NoTypeInformation
如果我添加另一个Import-CSV,那么它只会覆盖现有数据:
导入CSV C:\ File2.csv |选择“部门” |导出CSV-路径D:\ Result.csv -NoTypeInformation
如何用这两个命令的信息结果填充A和B列?感谢您的帮助。
答案 0 :(得分:1)
我会选择此选项:
$1 = Import-Csv -Path "C:\Users\user\Desktop\1.csv" | Select "Employee"
$2 = Import-Csv -Path "C:\Users\user\Desktop\2.csv" | Select "Department"
$marged = [pscustomobject]@()
$object = [pscustomobject]
for ($i=0 ; $i -lt $1.Count ; $i++){
$object = [pscustomobject]@{
Employees = $1[$i].Employee
Department = $2[$i].Department}
$marged += $object
}
$marged | ForEach-Object{ [pscustomobject]$_ } | Export-Csv -Path "C:\Users\user\Desktop\3.csv" -NoTypeInformation -Force
答案 1 :(得分:0)
我将说明我将如何执行此操作,但我这样做是因为与使用hastables相比,使用对象更自如。其他人可能会使用哈希表提供答案,这可能会更好。
首先,我将定义一个数组来保存您的数据,然后可以将其导出为CSV:
$report = @()
然后,我将CSV导入到可以通过以下方式迭代的对象:
$firstSet = Import-CSV .\File1.csv
然后,我将遍历此过程,将每一行导入到具有我想要的两个属性的对象中。在您的情况下,这些是“员工”和“部门”(可能可以轻松添加更多)。
foreach($row in $firstSet)
{
$employeeName = $row.Employee
$employee = [PSCustomObject]@{
Employee = $employee
Department = ""
}
$report += $employee
}
并且,如您在上面的示例中看到的那样,将此对象添加到报表中。
然后,将第二个CSV文件导入到另一个对象中以进行迭代(以良好的形式,实际上,在导入第一个CSV文件时,我会在脚本开头执行此操作):
$secondSet = Import-CSV .\File2.csv
现在这是有趣的地方。仅根据您提供的信息,我假设一个文件中的所有员工与其他文件中的部门的顺序相同。例如,如果我在“蛋糕品尝部”工作,而我的名字在文件1的第12行上,则文件2的第12行显示“蛋糕品尝部”。
在这种情况下,这很容易。您只需浏览两个列表并更新报告:
$i = 0
foreach($row in $secondSet)
{
$dept = $row.Department
$report[i].Department = $dept
$i++
}
此后,您的$report
对象将在一行中包含所有员工,在另一行中包含部门。然后,您可以将其导出为CSV:
$report | Export-CSV .\Result.csv -NoTypeInformation
如我所说,如果您的数据在两个文件中对齐,则此方法有效。如果没有,那么您需要一点点幻想:
foreach($row in $secondSet)
{
$emp = $row.Employee
$dept = $row.Department
$report | Where {$_.Employee -eq $emp} foreach {$_.Department = $dept
}
从技术上讲,您无论如何都可以这样做,但这取决于很多事情。首先,是否在两个文件的该列中都具有要匹配的数据(显然,在我的示例中,您不需要这样做,但是您不需要首先进行此操作,但是可以在其他字段中进行匹配) ,例如EmployeeID或DoB)。其次,关于个人记录的主权(例如,如果您的第一个文件中有多个匹配记录,那么您会遇到问题;您会期望第二个文件中有重复的记录,因为每个部门中都有多个人)。
无论如何,我希望这会有所帮助。正如我说的那样,可能有一种“更好”的方式来做到这一点,但这就是我的方式。