Вот пример файла, который я хотел бы отсортировать, найти и, наконец, извлечь данные и создать новые файлы.
Column1, Column2, Column3
A,1,2
B,1,2
C,1,2
A,1,3
B,3,4
A,2,3
B,4,5
C,1,4
D,3,4
A,2,3
D,2,3
Прежде всего, я бы хотел отсортировать по Column1 (легко). Далее создайте файлы, все строки которых принадлежат определенным значениям из Column1 Например:
File1:
A,1,2
A,1,3
A,2,3
A,2,3
File2:
B,1,2
B,3,4
B,4,5
...
Первая идея - прочитать каждую строку отсортированного массива и прекратить создавать первый файл, в котором появляются новые значения из Column1 (и начинать создание следующего файла), но я бы хотел этого избежать, потому что у меня есть сотни тысяч строк.
Вторая идея - найти уникальные значения из Column1 и использовать его для поиска данных в массиве. но здесь у меня будут тысячи запросов.
Код:
$array = Import-CSV -Path .\IDMUsers.csv -Delimiter ";"
$sorted = $array | Sort-Object -Property ManagerMail -Unique | Select- Object 'ManagerMail'
$sorted_array = $array | sort {$_.ManagerMail,$_.DisplayName}
ForEach ($manager in $sorted){
$UsersofManager = $sorted_array | ? {$_.ManagerMail -contains $manager.ManagerMail} | Export-Csv ".\$($manager.ManagerMail).csv" -NoTypeInformation
}
У меня есть 100 000 строк в CSV. Сначала я нахожу уникальные строки ($ sorted -> около 200 строк) и, наконец, запрашиваю $ sorted_array для каждой строки и создаю файл. Это займет около 20 минут. Есть идеи, как ускорить этот процесс?