Поиск в csv файле
Здравствуйте, гуру 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 |
ejik_off, вот взяли бы, да приложили в архиве и тот, и другой файл для облегчения работы отвечающим.
Попробуйте так: Скрытый текст
Код:
$sTxtFile = 'C:\Мои проекты\0289\0001.txt' |
Цитата:
Огромное спасибо за скрипт, работает!!!! :up |
Iska, венгерская нотация в PowerShell? Переутомление? Да и лучше сделать так (PowerShell v6):
Код:
$csv, $txt = (Import-Csv .\input.csv -Delimiter ','), (Get-Content .\input.txt) Код:
time { |
greg zakharov, классно, осталось понять как он работает )))
|
на рабочем компе скрипт не работает, видно версии PS разные. На раб.станции версия 5.1.17763.771
Скрытый текст
Сбой вызова метода из-за отсутствия в [System.Management.Automation.PSObject] метода с именем "op_Addition". строка:12 знак:8 + $sCSVContent += [PSCustomObject]@{samaccountname = $_; count = ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (op_Addition:String) [], RuntimeException + FullyQualifiedErrorId : MethodNotFound как адаптировать скрипт? |
ejik_off, используйте первый вариант. Вряд ли в данном случае разница в 70 миллисекунд имеет большое значение.
|
оба варианта дают такую ошибку
|
ejik_off, дайте примеры файлов, хоть будет на чём протестировать.
|
прикрепил архив
|
Код:
$txt = gc D:\temp\test\Users.txt |
DJ Mogarych, спасибо, работает!
|
ejik_off, это потому, что у Вас в примере в csv-файле одна строка. Я всё время забываю, что нужно постоянно отслеживать эти
Замените в том коде эту строку: Код:
$sCSVContent = Import-Csv -Path $sCSVFile Код:
$sCSVContent = , (Import-Csv -Path $sCSVFile) |
А, так вот в чём дело - а я и думаю, почему в csv просто так нельзя было добавить строку, и надо было принудительно указывать, что это массив, а не кастом-объект. В принципе, логично - PS что видит, так и интерпретирует, объект один, так почему это должно быть массивом?
|
Какие все однако переутомившиеся: сперва венгерская нотация, потом бредни про массив...
Код:
$c = Import-Csv .\input.csv |
Цитата:
Ладно, я понимаю, когда совсем нет элементов — тут деваться некуда. Это надо проверять. Так было с незапамятных времён, так и осталось. Но PowerShell теперь к этим двум вариантам добавляет ещё и третий вариант, абсолютно бессмысленный с точки зрения программирования, но который тоже приходится учитывать. Может быть, в шестой версии, которая у коллеги greg zakharov, это уже не так, и для одной строки командлет Import-Csv возвращает именно массив из одного элемента. Как и прочие командлеты в аналогичных случаях. Дай-то бог. Но у меня, в 5.1, пока что так: Скрытый текст
|
Iska, специально для вас:
Код:
E:\sandbox |
Цитата:
|
Цитата:
Цитата:
Цитата:
Если требуется таки массив, при любом количестве данных, то необходимо указать тип переменной, либо: Цитата:
и продолжает работать автоматическое приведение типов: И кроме того, есть ведь специальный оператор массива: The array operator is useful in scripts when you are getting objects, but do not know how many objects you get. Код:
$p = @(Get-Process Notepad) |
Цитата:
|
А можно ли как-то реализовать поиск в csv следующим образом: если значение "Слесарь-монтажник" имеется в csv, то копируем всю строку с этим значением в новый csv файл.
|
Цитата:
Код:
$Files = "C:\исходный файл.csv" Код:
"IgnoreCase";"LineNumber";"Line";"Filename";"Path";"Pattern";"Context";"Matches" |
JimmLight, CSV - это структурированный файл, и работать с ним как с обычным текстовым неверно.
Как называется колонка, в которой находится "слесарь-монтажник"? |
Цитата:
|
Код:
(Import-Csv "C:\исходный файл.csv") -match "слесарь-монтажник" |
Цитата:
Код:
(Import-Csv "C:\исходный файл.csv" -Encoding UTF8 -Delimiter ";") -match "слесарь-монтажник" | Export-Csv "C:\конечный файл.csv" -Encoding UTF8 -Delimiter ";" Почему то пустой "C:\конечный файл.csv" создаётся. |
Вы сначала без экспорта отладьте, чтобы нормально запускалось и выводило нужное.
Рекомендую Powershell ISE. |
Цитата:
Код:
Import-Csv .\1.csv -Delimiter ";" | |
Время: 00:03. |
Время: 00:03.
© OSzone.net 2001-