|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Сравнение файлов+добавить вычисляемое поле |
|
|
PowerShell - [решено] Сравнение файлов+добавить вычисляемое поле
|
Новый участник Сообщения: 25 |
Профиль | Отправить PM | Цитировать Добрый день. Прошу помощи в реализации такой задачи
Робот проводит обзвон клиентов - есть данные результата обзвона. Сейчас обычный txt без заголовков. Статус звонка,дата,время,номер телефона. Пример 1 файла
seen;16.03.2020;13:06:26;79000000001 undelivered;16.03.2020;13:06:36;79000000002 undelivered;16.03.2020;13:07:15;79000000003 seen;16.03.2020;13:08:26;79000000004 seen;16.03.2020;13:08:56;79000000005 С атс получаю данные о входящих звонках за период. Данные в xls, с заголовками Дата+время звонка, Номер телефона Пример 2 файла
calldate src 16.03.2020 16:59 79000000006 16.03.2020 16:58 79000000007 16.03.2020 16:58 79000000008 16.03.2020 16:57 79000000001 16.03.2020 16:57 79000000003 16.03.2020 16:57 79000000004 16.03.2020 16:57 79000000009 16.03.2020 16:57 79000000002 Задача: Узнать, сколько клиентов перезвонили и через какое время. По сути получается сделать сравнение файлов по номеру телефона, выбрать из 2-го файла строки, имеющиеся в первой файле, добавить вычисляемое поле (разность времени). Вывод вижу примерно так: Скрытый текст
Phone Time,sec 79000000001 30 79000000002 46 79000000003 150 Всего перезвонили: 3 Немного почитал про Compare-Object - подойдет ли он для данной задачи? Или же тут лучше делать через foreach и пробежать по двум файлам? Сама стратегия реализации пока не ясна 1 файл делаю я, можно добавить заголовки (я так понимаю если использовать Compare-Object ), или же убрать заголовки во 2 файле (если использовать foreach ) В моем случае файлы читать через Get-Content, или сделать импорт? Если импорт, то Import-Csv для обоих файлов? (и txt и xls) Сори за некоторый сумбур. Интуитивно понимаю, что есть несколько методов решения задачи, но какие применить здесь удобнее/правильнее/эффективнее В 1 файле до 1000 строк, во 2 - до 200 |
|
Отправлено: 10:30, 18-03-2020 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать solonenko, сделайте тестовые файлы, с реальной структурой, прикрепите их сюда...
|
------- Отправлено: 11:14, 18-03-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 25
|
Профиль | Отправить PM | Цитировать Приношу извинения, данные АТС выгружает в csv, а не xls
|
Отправлено: 12:04, 18-03-2020 | #3 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать solonenko,
Количество звонков по одному исходящему и одному входящему? Т.е. номера телефонов, в каждом списке - уникальные данные или нет? seen/undelivered - на что-нибудь влияют? В общем, пока маловато данных... |
------- Отправлено: 17:18, 18-03-2020 | #4 |
Новый участник Сообщения: 25
|
Профиль | Отправить PM | Цитировать YuS_2,
в рамках 1 дня мы звоним 1 раз, т.о. в out.txt - уникальные номера. клиент может звонить и несколько раз, т.о. в in.csv могут быть повторения номера, однако достаточно поймать 1-й входящий по времени. Следующие входящие от этого клиента это уже не реакция на бота. seen/undelivered - статус звонка - в данной задаче не влияет |
|
Отправлено: 22:24, 18-03-2020 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 23:52, 18-03-2020 | #6 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата solonenko:
Тогда, примерно так: $outsrc = 'out.txt' $insrc = 'in.csv' $result = 'res.csv' $out = ipcsv $outsrc -d ';' -h 'Status','Date','Time','Phone'| select Phone,@{n='Date';e={get-date($_.date+' '+$_.time)}} |sort phone -uni $in = ipcsv $insrc -d ';'| select @{n='Phone';e={$_.src}},@{n='Date';e={get-date $_.calldate}} |sort phone,date $out|%{ [pscustomobject]@{ 'Phone' = $_.phone 'CallBackDiff' = if(($i=[array]::indexof($in.phone,$_.phone)) -ne -1){ ($in[$i].date - $_.date).totalseconds } else {$null} } }|?{$_.callbackdiff -ne $null}|export-csv $result -d ';' -notype |
|
------- Отправлено: 05:16, 19-03-2020 | #7 |
Новый участник Сообщения: 25
|
Профиль | Отправить PM | Цитировать YuS_2, большое спасибо! Все отлично работает.
данным пример кода подстегивает меня развиваться дальше в направлении изучения PowerShell |
Отправлено: 10:32, 19-03-2020 | #8 |
Новый участник Сообщения: 25
|
Профиль | Отправить PM | Цитировать $in = ipcsv $insrc -d ';'| select @{n='Phone';e={$_.src}},@{n='Date';e={get-date $_.calldate}} |sort phone,date При сравнения номеров телефонов столкнулся с проблемой: в файле out.txt все номера тел. имеют префикс 7 в in.csv - многие 8. Для корректного сравнения нужно поменять первую цифру 8 на 7 $in = Import-Csv $insrc -d ';' foreach ($bird in $in) {$bird.src = $bird.src -replace('^8','7')} select @{n='Phone';e={$_.src}},@{n='Date';e={get-date $_.calldate}} |sort phone,date |
Отправлено: 13:25, 20-03-2020 | #9 |
fascinating rhythm Сообщения: 6491
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 13:36, 20-03-2020 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Сравнение файлов | Asdshka | Скриптовые языки администрирования Windows | 7 | 12-12-2018 15:42 | |
PowerShell - [решено] Сравнение 2 файлов | Johny_spb | Скриптовые языки администрирования Windows | 8 | 16-12-2016 14:12 | |
Любой язык - Сравнение списка файлов и каталога с файлами с копированием файлов из каталога | jastreb83 | Скриптовые языки администрирования Windows | 0 | 10-04-2013 09:56 | |
2010 - [решено] Добавить все контакты в поле "Кому" | exo | Microsoft Office (Word, Excel, Outlook и т.д.) | 2 | 13-12-2011 19:30 | |
Сравнение файлов | Guest | Программирование и базы данных | 6 | 24-04-2004 04:47 |
|