|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Выборочное копирование по значению в txt (csv) файлах |
|
CMD/BAT - Выборочное копирование по значению в txt (csv) файлах
|
Новый участник Сообщения: 42 |
Уважаемые профессионалы, обращаюсь к Вам за помощью.
Есть, формируемые ежедневно, несколько текстовых файлов (по факту можно сказать csv), в которых идут необходимые данные, каждый день (а иногда и по несколько раз в день) я их обрабатываю через Excell, но это не всегда проходит, иногда приходиться файлы буквально разделять. В самом экселе я обработываю через функцию ВПР, честно скажу иногда мозг взрывается((((( Сама задача состоит в том, что мне необходимы всего два значения: Schtrih и Result 1. В файле Schtrih.txt в первой колонке самые нужные значения, но их надо отсеивать по значению в третей колонке (т.е. или по 11-ому или 14-ому). 2. В файле Aspect.txt по отсеянным значениям Schtrih из одноименного файла, необходимо изъять значения Aspect 3. В файле wark.txt по ранее отсеянным значениям Aspect подобрать значения Result и прикрепить их со значениями Schtrih, ранее отсеянными. Самый наверное странный от меня ещё вопрос: а это возможно как сделать, к примеру, в CMD/BAT-с ним я поверхностно знаком и в случае каких-либо изменений от сборщиков (а они любят менять файлы), что бы я мог изменить название или номер столбца? Aspect.txt; Schtrih.txt; wark.txt |
|
Отправлено: 14:14, 04-06-2021 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать Если я правильно понял что нужно:
$Schtrihs = Import-Csv ./Schtrih.txt -Delimiter ";" | Where-Object {($_.Type -eq 11 ) -or ($_.Type -eq 14)} $Aspects = Import-Csv ./Aspect.txt -Delimiter ";" $warks = Import-Csv ./wark.txt -Delimiter ";" foreach ($Schtrih in $Schtrihs) { foreach ($Aspect in $Aspects) { foreach ($wark in $warks) { if (($Schtrih.Schtrih -eq $Aspect.Schtrih) -and ($Aspect.Aspect -eq $wark.Aspect)) { [pscustomobject]@{ "Schtrih" = $Schtrih.Schtrih "Aspect" = $Aspect.Aspect "Result" = $wark.Result } } } } } сохранить как ps1, запускать, соответсвенно, через powershell. |
Отправлено: 17:30, 04-06-2021 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать СПАСИБО))))
А как можно это сохранять и в столбцах, а то в самом окне PowerShell это выводится одним столбиком и приходится сохранять копированием. Я вот тут сам что то пытался со своей колокольни доделать, но выходит криво, постоянно ругается: Out-File : Не удается найти позиционный параметр, принимающий аргумент "Get-Process". C:\Test_stgin\Farm\на оборот\convert.ps1:4 знак:9 + Out-File <<<< -Encoding "UTF8" = Get-Process powershell >>./proc.txt -Value + CategoryInfo : InvalidArgument: ( ![]() + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.OutFileCommand Сам код, который я пытался перенаправить: $Schtrihs = Import-Csv ./Schtrih.txt -Delimiter ";" | Where-Object {($_.Type -eq 11 ) -or ($_.Type -eq 14)} $Aspects = Import-Csv ./Aspect.txt -Delimiter ";" $warks = Import-Csv ./wark.txt -Delimiter ";" Out-File -Encoding "UTF8" = Get-Process powershell >>./proc.txt -Value foreach ($Schtrih in $Schtrihs) { foreach ($Aspect in $Aspects) { foreach ($wark in $warks) { if (($Schtrih.Schtrih -eq $Aspect.Schtrih) -and ($Aspect.Aspect -eq $wark.Aspect)) { [pscustomobject]@{ "Schtrih" = $Schtrih.Schtrih "Aspect" = $Aspect.Aspect "Result" = $wark.Result } } } } } |
Отправлено: 08:52, 05-06-2021 | #3 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать как-то сложно. можно скинуть всё в переменную и из нее уже как удобнее будет.
$Schtrihs = Import-Csv ./Schtrih.txt -Delimiter ";" | Where-Object {($_.Type -eq 11 ) -or ($_.Type -eq 14)} $Aspects = Import-Csv ./Aspect.txt -Delimiter ";" $warks = Import-Csv ./wark.txt -Delimiter ";" $res = foreach ($Schtrih in $Schtrihs) { foreach ($Aspect in $Aspects) { foreach ($wark in $warks) { if (($Schtrih.Schtrih -eq $Aspect.Schtrih) -and ($Aspect.Aspect -eq $wark.Aspect)) { [pscustomobject]@{ "Schtrih" = $Schtrih.Schtrih "Aspect" = $Aspect.Aspect "Result" = $wark.Result } } } } } $res | Out-File res.txt $res | Export-Csv -Delimiter ";" -Path res.csv |
Отправлено: 10:05, 05-06-2021 | #4 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать СПАСИБО ОГРОМНОЕ))))
|
|
Отправлено: 11:27, 05-06-2021 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - txt в csv | porokh | Скриптовые языки администрирования Windows | 30 | 31-01-2019 19:02 | |
CMD/BAT - Поиск и замена строки в txt файлах по содержанию этой строки. | sayyad | Скриптовые языки администрирования Windows | 1 | 06-12-2015 13:20 | |
CMD/BAT - XCOPY выборочное копирование файлов. | Fanbeer | Скриптовые языки администрирования Windows | 19 | 02-12-2015 20:09 | |
VBS/WSH/JS - Поиск текста в файлах и копирование результата по сети | anton_ego | Скриптовые языки администрирования Windows | 4 | 25-02-2013 12:42 | |
CMD/BAT - [решено] Выборочное копирование из текстового файла. | odin1 | Скриптовые языки администрирования Windows | 5 | 09-03-2012 22:00 |
|