|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Поиск в csv файле |
|
PowerShell - [решено] Поиск в csv файле
|
Старожил Сообщения: 473 |
Профиль | Отправить PM | Цитировать Здравствуйте, гуру PS!!!
Есть файл тхт в нем содержатся логины: ppetrov iivanov ssidorov ... и есть csv файл в формате samaccountname,count samaccountname,count ppetrov,1 iivanov,1 ssidorov,2 нужно сделать поиск, т.е логины из тхт файла сравнить с логинами из csv-файла если логин найден, то поле count увеличить на 1, если не найдено то добавить в конец файла в поле samaccountname: логин и в count: 1 $txt = get-content c:\tmp\usr.txt $csv = import-csv c:\tmp\usr_list.csv -Delimiter "," foreach($user_txt in $txt) { foreach($user_csv in $csv){ if($user_txt -eq $user_csv.samaccountname) { как изменить колонку count? } else {$user_txt,1 | out-file c:\tmp\usr_list.csv -Append - тоже не знаю как правильно вставить} } } |
|
Отправлено: 17:12, 23-12-2019 |
fascinating rhythm Сообщения: 6619
|
Профиль | Отправить PM | Цитировать $txt = gc D:\temp\test\Users.txt [array]$csv = import-csv D:\temp\test\user_list.csv foreach ($login in $txt) { if ($login -notin $csv.samaccountname) { $csv += [pscustomobject]@{samaccountname="$login";count="1"} } else {([double]($csv |? samaccountname -eq "$login").count)++} } $csv |export-csv D:\temp\test\user_list.csv -NoTypeInformation |
------- Отправлено: 11:15, 24-12-2019 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 473
|
Профиль | Отправить PM | Цитировать DJ Mogarych, спасибо, работает!
|
Отправлено: 12:21, 24-12-2019 | #12 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать ejik_off, это потому, что у Вас в примере в csv-файле одна строка. Я всё время забываю, что нужно постоянно отслеживать эти
Замените в том коде эту строку: на эту: |
Отправлено: 19:22, 24-12-2019 | #13 |
fascinating rhythm Сообщения: 6619
|
Профиль | Отправить PM | Цитировать А, так вот в чём дело - а я и думаю, почему в csv просто так нельзя было добавить строку, и надо было принудительно указывать, что это массив, а не кастом-объект. В принципе, логично - PS что видит, так и интерпретирует, объект один, так почему это должно быть массивом?
|
------- Отправлено: 08:48, 25-12-2019 | #14 |
Забанен Сообщения: 793
|
|
Отправлено: 10:38, 25-12-2019 | #15 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
Ладно, я понимаю, когда совсем нет элементов — тут деваться некуда. Это надо проверять. Так было с незапамятных времён, так и осталось. Но PowerShell теперь к этим двум вариантам добавляет ещё и третий вариант, абсолютно бессмысленный с точки зрения программирования, но который тоже приходится учитывать. Может быть, в шестой версии, которая у коллеги greg zakharov, это уже не так, и для одной строки командлет Import-Csv возвращает именно массив из одного элемента. Как и прочие командлеты в аналогичных случаях. Дай-то бог. Но у меня, в 5.1, пока что так: Скрытый текст
|
|
Отправлено: 20:22, 25-12-2019 | #16 |
Забанен Сообщения: 793
|
Iska, специально для вас:
E:\sandbox λ $PSVersionTable.PSVersion Major Minor Build Revision ----- ----- ----- -------- 5 1 18362 145 E:\sandbox λ $c = Import-Csv .\input.txt E:\sandbox λ $c.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object[] System.Array E:\sandbox λ $c[0] samaccountname count -------------- ----- ppetrov 1 E:\sandbox λ $c[0].samaccountname ppetrov |
Отправлено: 20:46, 25-12-2019 | #17 |
Сообщения: 53482
|
Профиль | Отправить PM | Цитировать Цитата greg zakharov:
|
|
Отправлено: 21:58, 25-12-2019 | #18 |
Crazy Сообщения: 1217
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
Цитата Iska:
Если требуется таки массив, при любом количестве данных, то необходимо указать тип переменной, либо: Цитата Iska:
и продолжает работать автоматическое приведение типов: И кроме того, есть ведь специальный оператор массива: The array operator is useful in scripts when you are getting objects, but do not know how many objects you get. Так что логика, определенно, присутствует... к ней просто надо привыкнуть. |
||||
------- Последний раз редактировалось YuS_2, 26-12-2019 в 07:46. Отправлено: 07:34, 26-12-2019 | #19 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Последний раз редактировалось Busla, 26-12-2019 в 12:59. Отправлено: 10:53, 26-12-2019 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
PowerShell - поиск по части IP адреса в CSV файле | God-of-Chaos | Скриптовые языки администрирования Windows | 3 | 06-11-2017 10:45 | |
PowerShell - [решено] Переименование дублей в csv файле | YURETZS | Скриптовые языки администрирования Windows | 3 | 20-10-2017 11:42 | |
CMD/BAT - Поиск цифр в текстовом файле и последующий их поиск в названии файлов массива (лог.) | antares_80@vk | Скриптовые языки администрирования Windows | 10 | 25-10-2015 11:34 | |
PowerShell - [решено] Поиск и вставка информации из одного csv-файла в другой | IvanXXL | Скриптовые языки администрирования Windows | 1 | 20-07-2011 12:48 | |
PowerShell - [решено] Поиск и удаление дублей в csv-файле | IvanXXL | Скриптовые языки администрирования Windows | 4 | 19-07-2011 13:14 |
|