Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 15.01.2016
Сообщений: 4

Обьединение дубликатов строк по определённому правилу

15.01.2016, 10:58. Показов 1958. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Помогите с одной задачкой.
Выгружаю логи с серверов:

PowerShell
1
Get-Eventlog system -after $yesterday -before $today -Entry error -comp $comp | Select-Object Machinename,Timewritten,Source,EventID,Message | Export-Csv -path $patha -Append -notypeinformation -UseCulture -Encoding utf8;
Необходимо когда Message повторяется, добавить поле Timewritten дубликата в поле Timewritten оригинала, а затем удалить строку дубликата.
Чтобы не было по одинаковым ошибкам отдельных строк. Но для удобства анализа видно, во сколько и сколько раз ошибка возникала.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.01.2016, 10:58
Ответы с готовыми решениями:

Заполнить массив по определённому правилу
Добрый день) Помогите, пожалуйста, решить задачи) 4. Заполнить массив по определённому правилу: 0 1 1 1 1 0 2 0 1 1 0 4 ...

Переименование файлов по определённому правилу
Как сделать еще 1 задание Переименовать все файлы lab01.txt, Inf_lab02.txt … в каталоге К в lab01_Inf.txt, lab02_Inf.txt, ... в командной...

Переименование файлов по определённому правилу
Всю голову сломал, никак не могу понять как можно с помощью командной строки переименовать файлы "Inf_lab01.txt",...

6
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
23.01.2016, 02:59
С такой постановкой задачи у вас в колонке Timewritten будет или одно значение или массив из нескольких, что в дальнейшем затруднит обработку этой таблицы...


Могу предложить такой вариант - сохраняется только последняя строка с повторяющемся Message, но при этом добавляется колонка Count, в которой указано суммарное количество этих событий

Для теста можно заменить значение -EntryType с Error на Information (таких записей будет точно много)

PowerShell
1
2
3
4
5
6
7
$computer = 'ServerName'
$today = Get-Date
$yesterday = $today.AddDays(-1)
 
Get-Eventlog -LogName system -After $yesterday -Before $today -EntryType Error -ComputerName $computer | Select-Object Machinename,Timewritten,Source,EventID,Message `
| Group-Object Message | select Count -ExpandProperty Group | sort Message -Unique | sort Timewritten `
| Out-GridView
1
0 / 0 / 0
Регистрация: 15.01.2016
Сообщений: 4
25.01.2016, 10:38  [ТС]
Спасибо!
Покопавшись я все таки сделал что хотел, но как вы и сказали возникла проблема с дальнейшей обработкой этих данных.
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$compini = "C:\Scripts\Servlog\complist.ini";
$complis = Get-Content $compini;
$today = get-date;
$yesterday = (get-date).AddDays(-1);
$v4era = $yesterday.ToString("ddMMyy");
$out2 = @{};
$out = @{};
$patha = "C:\Scripts\Servlog" + $v4era + ".csv";
foreach ($comp in $complis){
$csv = Get-Eventlog application -after $yesterday -before $today -Entry error -comp $comp | Select-Object Machinename,Timewritten,Source,EventID,Message 
$csv | ForEach-Object {
$id = [string]$csv.Message
$out[$id]=[string]$_.timewritten + "," + $out[$id]
if ($out2.ContainsKey($id)) {$line = $_.MachineName +";"+ $out[$id] + ";"+ $_.Source +";"+ $_.EventID +";"+ $_.Message}
else {$line = $_.MachineName +";"+ $_.TimeWritten + ";"+ $_.Source +";"+ $_.EventID +";"+ $_.Message}
$out2[$id]=$line
}
}
А именно, теперь не могу красиво эти данные ($out2.value) засунуть в csv файл. В столбце message часть предложения переносится в новую строчку.
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
25.01.2016, 12:45
Лучший ответ Сообщение было отмечено mix4it как решение

Решение

mix4it, у вас точно этот скрипт работает? В 12 строке - $id = [string]$csv.Message, но $csv - это весь массив с выбранными событиями.

Цитата Сообщение от mix4it Посмотреть сообщение
В столбце message часть предложения переносится в новую строчку.
Это потому, что в поле message есть большие сообщения из нескольких абзацев, которые содержат символ перевода строки.

Тут надо или всё объединять в одну строку, как-то так:

$event.Message.Split() -join ' '

Или так:

$event.Message.Replace("`n",'')

Если вам точно нужно, для повторяющихся событий, в поле TimeWritten несколько значений, то у меня получилось так:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$complis = Get-Content -Path "C:\Scripts\Servlog\complist.ini"
$today = get-date
$yesterday = (get-date).AddDays(-1)
$v4era = $yesterday.ToString("ddMMyy")
$patha = "C:\Scripts\Servlog" + $v4era + ".csv"
$out = @{}
 
foreach ($comp in $complis)
{
 
    foreach ($event in (Get-Eventlog application -after $yesterday -before $today -Entry error -comp $comp))
    {
    $id = $event.Message
    
    #$message = $event.Message.Replace("`n",'')
    $message = $event.Message.Split() -join ' '
        
    if ($out.ContainsKey($id))
        {
        $DupEvent = $out[$id].split(';')[1]
        $NextTimeWritten = $DupEvent + ',' + $event.TimeWritten.ToString()
        $line = $event.MachineName,$NextTimeWritten,$event.Source,$event.EventID,$message -join ';'
        }
    else {$line = $event.MachineName,$event.TimeWritten.ToString(),$event.Source,$event.EventID,$message -join ';'}
    
    $out[$id] = $line
    }
 
}
 
$out.Values | Set-Content -Path $patha -Force:$true -Encoding UTF8
Но хочу заметить, что одинаковых событий может быть очень много и работать с такой таблицей будет крайне неудобно...
1
0 / 0 / 0
Регистрация: 15.01.2016
Сообщений: 4
25.01.2016, 15:58  [ТС]
Проблема осталась с такими типами message:
SnapManager for SQL Server completed the backup operations with error(s) on the following number of databases on server:

Succeeded: 10 Not run: 2 Total databases detected: 12

Note: 'Not Run' is considered as an error.
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
25.01.2016, 16:43
Есть несколько видов перевода строки, попробуйте так:

PowerShell
1
2
3
4
5
6
7
8
$test = "SnapManager for SQL Server completed the backup operations with error(s) on the following number of databases on server:
 
Succeeded: 10   Not run: 2  Total databases detected: 12
 
Note: 'Not Run' is considered as an error."
 
$message = $test -replace "`n|`r|`t"
$message
И получаем одну строчку:

SnapManager for SQL Server completed the backup operations with error(s) on the following number of databases on server:Succeeded: 10Not run: 2Total databases detected: 12Note: 'Not Run' is considered as an error.

Добавлено через 2 минуты
А ещё можно так:

PowerShell
1
$test -replace "`n|`r|`t"," "
SnapManager for SQL Server completed the backup operations with error(s) on the following number of databases on server: Succeeded: 10 Not run: 2 Total databases detected: 12 Note: 'Not Run' is considered as an error.

Добавлено через 24 минуты
Проверил, у меня этот способ не оставил многострочных сообщений, т.е. в моём скрипте 16 строчку:

PowerShell
1
$message = $event.Message.Split() -join ' '
нужно поменять на:

PowerShell
1
$message = $event.Message -replace "`n|`r|`t"," "
1
0 / 0 / 0
Регистрация: 15.01.2016
Сообщений: 4
25.01.2016, 17:21  [ТС]
А у меня все также... Ладно, спасибо, понял куда копать. Попытаюсь сам разобраться в чем косяк
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.01.2016, 17:21
Помогаю со студенческими работами здесь

Переименование файлов по определённому правилу
Нужно переименовать все файлы lab01.txt, lab02.txt … в каталоге К в lab01_Inf.txt, lab02_Inf.txt, ... Rename H:\K lab*.txt H:\K...

Переименование файлов по определённому правилу
Доброе время суток. Задача: есть много файлов. Нужно в каждом из файлов поменять один символ на другой (например а на б, с на д и т.д). Как...

Заполнение матрицы по определённому правилу
Дано число n. Создайте массив размером n×n и заполните его по следующему правилу. На главной диагонали должны быть записаны числа 0. На...

Сформировать новый массив по определённому правилу
Дан массив целых чисел а1,…,аk. Если элемент массива отрицательный, то умножить этот элемент на квадрат наибольшего элемента массива, если...

Поиск текста в XML-файле по определённому правилу
Есть файл xml. Есть файл txt1 содержит текст 00.00.00.00 В xml нужно найти первое вхождение 00.00.00.00 и сохранить в файл txt2 11.22.33.44...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru