【发布时间】:2017-06-12 09:01:50
【问题描述】:
我正在尝试处理一个只有三列的 15MB CSV 文件。例如:
StaffNumber,EmailAddress,Manager
123,ArthurDent@beeblebrox.com,456.
我需要搜索 CSV 文件的每一行,显示员工编号、电子邮件地址,然后获取经理的 ID 号并进行搜索,显示他们的员工编号和电子邮件,然后获取 他们的 em> 经理的 ID 和重复相同。最后,我需要让 CSV 文件的每一行都有用户 ID 和电子邮件,以及最多三个经理 ID 和电子邮件。
我正在努力解决这个问题:
123,ArthurDent@beeblebrox.com,456,Marvin@beeblebrox.com,789,Zaphod@Beeblebrox.com,098,zaphod@beeblebrox.com
有些行不包含电子邮件地址或经理的 ID 号,所以这又是一个麻烦事。我打算在这些字段中简单地添加“空白”或“X”。
到目前为止,我已经敲定了这个简单的脚本来一次搜索一个。它可以工作,但是速度非常慢。从今天早上开始,通过该文件需要 6 个小时才能获得 0.31%。啊!
我读了很多遍,直到完全搞不懂如何最好地处理价值 15MB 的 CSV 数据、不同的 PowerShell 版本、本周最好的东西等等,而 PowerShell 与我常用的语言相去甚远(请遗憾我缺乏 PS技能。我只是想充实一个基本的测试脚本以获得一个想法)。
我目前正在运行 PowerShell v4,并且我知道与早期版本存在兼容性问题。我想尽量与未来的版本保持兼容。
处理此文件的最快方法是什么? 300,000 行只有 15MB,我不关心 RAM。我只是不知道如何更有效地运行此搜索。
$FilePath = "C:\Temp\DA-UserList.csv"
$DAUserlist = Import-CSV $FilePath
$inputNumber = Read-Host -Prompt "Employee ID Number"
$DAUser1 = $DAUserlist | Where{$inputNumber -match $_.StaffNumber}| Select -First 1
ForEach ($item in $DAUser1){
$StaffNumber1 = $($item.StaffNumber)
$EmailAddress1 = $($item.EmailAddress)
$Manager1 = $($item.Manager)
printf $item.StaffNumber
printf ","
printf $EmailAddress1
$DAUser2 = $DAUserlist | Where{$Manager1 -match $_.StaffNumber}| Select -First 1
ForEach ($item in $DAUser2){
$StaffNumber2 = $($item.StaffNumber)
$EmailAddress2 = $($item.EmailAddress)
$Manager2 = $($item.Manager)
printf ","
printf $StaffNumber2
printf ","
printf $EmailAddress2
$DAUser3 = $DAUserlist | Where{$Manager2 -match $_.StaffNumber}| Select -First 1
ForEach ($item in $DAUser3){
$StaffNumber3 = $($item.StaffNumber)
$EmailAddress3 = $($item.EmailAddress)
$Manager3 = $($item.Manager)
printf ","
printf $StaffNumber3
printf ","
printf $EmailAddress3
$DAUser4 = $DAUserlist | Where{$Manager3 -match $_.StaffNumber}| Select -First 1
ForEach ($item in $DAUser4){
$StaffNumber4 = $($item.StaffNumber)
$EmailAddress4 = $($item.EmailAddress)
$Manager4 = $($item.Manager)
printf ","
printf $StaffNumber4
printf ","
printf $EmailAddress4
printf \n
}
}
}
}
【问题讨论】:
标签: powershell csv powershell-4.0