Как удалить начальную отметку времени?
У меня есть файлы журналов.
Некоторые операторы 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
Но он просто выводит строки, не удаляя начальные символы.