Как удалить начальную отметку времени?

У меня есть файлы журналов.
Некоторые операторы UPDATE SQL получают ошибки, но не все.
Мне нужно знать все операторы, которые получают ошибки, чтобы я мог найти закономерность сбоя.

Я могу отсортировать все файлы журнала и получить уникальные строки, например:

      $In = "C:\temp\data"
$Out1 = "C:\temp\output1"
$Out2 = "C:\temp\output2"

Remove-Item $Out1\*.*
Remove-Item $Out2\*.*

# Get the log files from the last 90 days
Get-ChildItem $In -Filter *.log | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-90)} |
Foreach-Object {
    $content = Get-Content $_.FullName

    #filter and save content to a file
    $content | Where-Object {$_ -match 'STATEMENT'} | Sort-Object -Unique | Set-Content $Out1\$_
}

# merge all the files, sort unique, write to output
Get-Content $Out2\* | Sort-Object -Unique | Set-Content $Out3\output.txt

Прекрасно работает.

Но некоторые из журналов имеют начальную отметку даты и времени в первых 24 символах. Мне нужно убрать это, иначе все эти строки уникальны.

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

Вот что у меня есть до сих пор:

      # Get the log files from the last 90 days
Get-ChildItem $In -Filter *.log | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-90)} |
Foreach-Object {
    $content = Get-Content $_.FullName

    #filter and save content to a file
    $s = $content | Where-Object {$_ -match 'STATEMENT'} 
    # strip datetime from front if exists
    If (Where-Object {$s.Substring(0,1) -Match '/d'}) { $s = $s.Substring(24) }
    $s | Sort-Object -Unique | Set-Content $Out1\$_
}

# merge all the files, sort unique, write to output
Get-Content $Out1\* | Sort-Object -Unique | Set-Content $Out2\output.txt

Но он просто выводит строки, не удаляя начальные символы.

0 ответов

Другие вопросы по тегам