3つの列しかない15MBのCSVファイルを処理しようとしています。たとえば:再帰的検索に基づいてCSVで新しい列を作成する
StaffNumber,EmailAddress,Manager
123,[email protected],456.
私はその後、CSVファイルの各行を検索する職員番号、電子メールアドレスを表示し、管理者のID番号を取得し、そのスタッフの番号と電子メールを表示する、そのために検索する必要がありますののマネージャーIDを使用して同じことを繰り返します。最後に、私はCSVファイルの各行にユーザーのIDと電子メールを持ち、の管理者IDと電子メールを最大でとする必要があります。
私はこれで終わるしようとしている:それは作品の中に別のレンチを投げるよう
123,[email protected],456,[email protected],789,[email protected],098,[email protected]
一部の行に、電子メールアドレスまたは管理者のID番号が含まれていません。私はこれらのフィールドに単に "空白"または "X"を追加する予定でした。
これまでのところ、この簡単なスクリプトを使用して、一度に1つずつ検索しました。それは動作しますが、それはひどく遅いです。今朝以降、そのファイルから0.31%を得るのに6時間かかりました。うん!
15MB相当のCSVデータ、さまざまなPowerShellバージョン、今週のベストプラクティスなどを処理するにはどうすればいいのかよく分かりませんでしたが、PowerShellは私の通常の言語とはかけ離れています。 PSスキル。私はちょうどアイデアを得るために基本的なテストスクリプトを完成させようとしていた)。
私は現在PowerShell v4を使用しています。以前のバージョンとの互換性の問題があります。合理的な将来のバージョンとの互換性を保つようにしたいと思います。
このファイルを処理する最も速い方法は何ですか? 30万行でわずか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
}
}
}
}