Лучший отвечающий
Powershell подсчет суммы одинаковых значений

Вопрос
-
День добрый,
помогите разобраться.
Есть таблица, (источник). Необходимо посчитать кол-во каждого (CallerID) за каждый день месяца.
CallerID Destination Disposition Duration App Date 222 XXX ANSWERED 0:00 Dial 05.12.2016 233 XXX ANSWERED 0:18 Dial 05.12.2016
XXX ANSWERED 0:03 Dial 05.12.2016
XXX ANSWERED 0:02 Dial 05.12.2016
XXX ANSWERED 0:03 Dial 05.12.2016 100 XXX ANSWERED 0:07 Dial 05.12.2016 311 XXX ANSWERED 0:01 Dial 05.12.2016 100 XXX ANSWERED 0:10 Dial 05.12.2016 203 XXX ANSWERED 0:00 Dial 05.12.2016 233 XXX ANSWERED 0:00 Dial 05.12.2016
И результат занести в таблицу. Рис. ниже. Т.е. №100 - 01.12.2016 = 4, и т.д.PHONE # 01.12.2016 02.12.2016 100 4 1 210 12 4 203 ... .... 233 ... .... 311 .... .... 244 .... ....
Уже голову себе сломал, пытаюсь реализовать через многомерный массив. Но ....
Кода, даже приблизительно рабочего нет. Запутался. Или хотя бы подскажите алгоритм.заранее спасибо.
13 декабря 2016 г. 9:55
Ответы
-
$data = Get-Content C:\poshdata\sAsterisk_14122016.csv | Foreach {$_ -replace ";;",";"} | ConvertFrom-Csv -Delimiter ";" $data | Where {$_."Имя звонящего".Trim() -match "^\d{3}$"} | Group "Имя звонящего","Дата звонка" -NoElement
- Помечено в качестве ответа KazunEditor 19 декабря 2016 г. 5:49
14 декабря 2016 г. 11:13Отвечающий
Все ответы
-
Файл формата:
"CallerID","Destination","Disposition","Duration","App","Date" "222","XXX","ANSWERED","0:00","Dial","05.12.2016" "233","XXX","ANSWERED","0:18","Dial","05.12.2016" "XXX","ANSWERED","0:03","Dial",,"05.12.2016" "XXX","ANSWERED","0:02","Dial",,"05.12.2016" "XXX","ANSWERED","0:03","Dial",,"05.12.2016" "100","XXX","ANSWERED","0:07","Dial","05.12.2016" "311","XXX","ANSWERED","0:01","Dial","05.12.2016" "100","XXX","ANSWERED","0:10","Dial","05.12.2016" "203","XXX","ANSWERED","0:00","Dial","05.12.2016" "233","XXX","ANSWERED","0:00","Dial","05.12.2016"
Скрипт:
PS (STA) > Import-Csv 2.csv | Group CallerID,Date -NoElement Count Name ----- ---- 1 222, 05.12.2016 2 233, 05.12.2016 3 XXX, 05.12.2016 2 100, 05.12.2016 1 311, 05.12.2016 1 203, 05.12.2016
- Предложено в качестве ответа Vector BCOModerator 13 декабря 2016 г. 13:39
13 декабря 2016 г. 10:07Отвечающий -
Спасибо,
но всё равно не могу понять
$wb1.SaveAs($savePath,6) - вот таким образом сохраняю csv из эселя. CSV имеет формат:
Дата звонка; Имя звонящего; ;Куда звонил; ;Статус звонка; Длительность; App;Входящий номер; Id`s
01.12.2016 0:00; ххххххххххх; ;xxx; ; ANSWERED; 0:05:05; Dial; -; 1480614211.19788
01.12.2016 0:00; ххх; ;xxxxxxxxxx; ; NO ANSWER; 0:00:32; Dial; -; 1480613922.19783
01.12.2016 0:00; ххх; ;xxxxxxxxxx; ; ANSWERED; 0:01:57; Dial; -; 1480613248.19781
01.12.2016 0:00; ххx; ;xxxxxxxxxx; ; ANSWERED; 0:01:11; Dial; -; 1480612720.19779при выполнении вашего командлета:
Import-Csv $savePath | Group "Имя звонящего","Дата звонка" -NoElement #| Out-File($pathw)
Count Name
Выдает общее кол-во
----- ----
37Пробовал заменять; на ,
Пробовал сохранять в разных форматах Юникод, Ютфрезультат тот же (
- Изменено Tyuka 13 декабря 2016 г. 14:12
13 декабря 2016 г. 14:00 -
Для кого я привожу формат файла с запятыми, а тут даже скопировать не могут правильно, сильно.
Прикладывайте файл, раз описать сил правильно не хватает.
PS (STA) > Import-Csv file.csv -Delimiter ";" | Group "Имя звонящего","Дата звонка" -NoElement WARNING: One or more headers were not specified. Default names starting with "H" have been headers. Count Name ----- ---- 1 ххххххххххх, 01.12.201... 2 ххх, 01.12.2016 0:00 1 хх, 01.12.2016 0:00
- Изменено KazunEditor 13 декабря 2016 г. 14:17
13 декабря 2016 г. 14:16Отвечающий -
Ну уж извините,
я пробовал и с запятыми, правда конвертил - вот так :
Get-Content ($patht) | ForEach-Object {$_ -replace ';',','} | Set-Content ($patht) -Encoding Unicode
Вот сама csv 13122016.csv
Когда файл csv с запятыми, валит вот такую ошибку:
-------------------------------------------------------------------
Import-Csv : Cannot process argument because the value of argument "name" is invalid. Change the value of the "name" argu
ment and run the operation again.
At C:\Users\s.tyuznev\AppData\Local\Temp\2\b5944030-43d6-48fe-8749-d992894d57b6.ps1:2 char:11
+ Import-Csv <<<< $savePath | Group 'Имя звонящего','Дата звонка' -NoElement #| Out-File ($pathw+'counttab.txt')
+ CategoryInfo : InvalidArgument: (:) [Import-Csv], PSArgumentException
+ FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.ImportCsvCommand
_________________________________________
Извините, что отнимаю ваше время.
13 декабря 2016 г. 14:52 -
PS > Import-Csv 13122016.csv -Delimiter ";" |Group "Имя звонящего","Дата звонка" -NoElement WARNING: One or more headers were not specified. Default names starting with "H" have been used in place of any missin headers. Count Name ----- ---- 1 380503322264, 01.12.20... 2 103, 01.12.2016 0:00 4 233, 01.12.2016 0:00 2 110, 01.12.2016 0:00 1 380675079994, 01.12.20... 2 216, 01.12.2016 0:00 1 240, 01.12.2016 0:00 2 674401716, 01.12.2016 ... 1 442777070, 01.12.2016 ... 2 312, 01.12.2016 0:00 1 459621202, 01.12.2016 ... 2 102, 01.12.2016 0:00 1 212, 01.12.2016 0:00 5 504225422, 01.12.2016 ... 2 202, 01.12.2016 0:00 1 213, 01.12.2016 0:00 2 107, 01.12.2016 0:00 1 311, 01.12.2016 0:00 1 302, 01.12.2016 0:00 1 234, 01.12.2016 0:00 1 203, 01.12.2016 0:00 1 200, 01.12.2016 0:00
13 декабря 2016 г. 15:41Отвечающий -
Извините, не понимаю, что я делаю не так. (
14 декабря 2016 г. 6:30 -
Скриншот из консоли PowerShell: Import-Csv $savePath
- Изменено KazunEditor 14 декабря 2016 г. 6:42
14 декабря 2016 г. 6:40Отвечающий -
-
Вы русский язык понимаете? Если нет, то пригласите у кого есть два класса образования.
Запускать в PowerShell консоли, не в ISE, не в других редакторах. Файл должен быть в кодировке Unicode, если ума не хватает вставить правильный путь $savePath, то указать его вручную.
14 декабря 2016 г. 7:15Отвечающий -
Вы знаете, не могу назвать себя гением. Русский язык я прекрасно понимаю и достаточно не плохо знаю. Вставить правильный путь $savePath или указать его вручную - ума особо не надо. А вот от вашей манеры вести диалог, пропадает желание обращаться за помощью. Если я отнимаю Ваше время, то уж извините. Всегда разбирался сам, первый раз обратился за помощью, думал время сэкономить. А слушать, какой я говн*кодер, так это я и без Вас знаю. Это скриншот, который Вы просили? И да, от имени админ...., т.к. я понимаю, что Вы меня уже записали в касту аляушных. Или это опять не то? Хорошего дня.
- Изменено Tyuka 14 декабря 2016 г. 7:44
14 декабря 2016 г. 7:43 -
Ума не надо, но как видите выше, не смогли c 4 поста прошу. Я не прошу ничего лишнего, кроме правильно скопировать и вставить. Тут же я вижу ISE,блокноты, вранье, но не то что я просил:
Пробовал заменять; на ,
Пробовал сохранять в разных форматах Юникод, Ютф
результат тот же (
Теперь в консоли PowerShell:
Import-Csv C:\poshdata\sAsterisk_14122016.csv -Delimiter ";" |Group "Имя звонящего","Дата звонка" -NoElement
- Изменено KazunEditor 14 декабря 2016 г. 7:49
14 декабря 2016 г. 7:48Отвечающий -
14 декабря 2016 г. 7:58
-
Выложить файл этот на обменник и проверить результат работы на файле из Вашего поства - Вот сама csv 13122016.csv
И версию PowerShell обозначить.
Если PowerShell V2:
Get-Content C:\poshdata\sAsterisk_14122016.csv | Foreach {$_ -replace ";;",";"} | ConvertFrom-Csv -Delimiter ";" |Group "Имя звонящего","Дата звонка" -NoElement
- Изменено KazunEditor 14 декабря 2016 г. 8:08
14 декабря 2016 г. 8:02Отвечающий -
Спасибо,
данная конструкция работает. Да пош 2.0
Name : ConsoleHostVersion : 2.0Если можно еще один вопрос,
Count Name
мне необходимо считать только 3-х значные номера:
----- ----
3 222, 06.12.2016 0:00
1 442425829, 06.12.2016 ...
2 443627430, 06.12.2016 ...
1 311, 06.12.2016 0:00
Я так понимаю, мне правильней удалить строки с "не нужными" номерами до подсчета?
это лучше делать используя регулярные выражения?
заранее спасибо. Вы мне очень помогли. Потому что я уже начал лепить костыли.
14 декабря 2016 г. 10:57 -
$data = Get-Content C:\poshdata\sAsterisk_14122016.csv | Foreach {$_ -replace ";;",";"} | ConvertFrom-Csv -Delimiter ";" $data | Where {$_."Имя звонящего".Trim() -match "^\d{3}$"} | Group "Имя звонящего","Дата звонка" -NoElement
- Помечено в качестве ответа KazunEditor 19 декабря 2016 г. 5:49
14 декабря 2016 г. 11:13Отвечающий