일부 대용량 텍스트 파일에서 데이터 집합을 추출하려고합니다. 내가 날짜와 괄호 사이의 비트 (프로세스 ID)를 얻고, 다음 테이블을 컴파일하고 싶습니다powershell 정규식 가져 오기 테이블에
2011-12-09 18:20:55, ABC.EXE[3b78], The rest of the line...
: 기본적으로, 각 라인은 다음과 같이 보인다. 이 태스크의 두 번째 단계는이 테이블을 그룹화하여 각 프로세스 ID에 대한 가장 빠른 날짜를 얻고, 실제로 프로세스 ID 당 첫 번째 로그 항목의 날짜와 시간을 제공하여 해당 인스턴스의 시작 시간에 근사하게 맞춰야한다 프로세스의
내가 지금까지있어 무엇
gci -filter *.log -r
| select-string '(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}), ABC.EXE\[(.{4})'
| % { $_.matches } | % { $_.groups } | % { $_.value }
이 (가) 캡처를 뱉어 (읽기 쉽도록 다른 행으로 분할). 첫 번째 캡처를 무시하고 같은 라인에 두 번째와 세 번째를 결합하고 싶습니다.
도움 말? 주세요.
편집 : DOH! 내 질문에 대답 할 수 없다. 그래서 ...
좋아, 나는 옳은 길에 있다고 생각해. 소위 질문 here 내가 즉, 원하는 개별 부품을 얻기 위해 나에게 도움이 :
$_.matches[0].groups[1].value, $_.matches[0].groups[2].value
다음에, MSDN 기사 here이 방법을 보여줍니다 수 있습니다 '덩어리'객체에 비트에이를 그룹화 할 수/분류/조작 된. 최종 결과
gci -filter *.log | select-string '(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}), ABC.EXE\[(.{4})'
| % { new-object object
| add-member NoteProperty Name $_.matches[0].groups[1].value -passthru
| add-member NoteProperty PId $_.matches[0].groups[2].value -passthru }
누구나 더 깨끗한 방법을 알고 있다면 알려 주시기 바랍니다. New-Object
cmdlet을 속성의 해시 테이블받는 -Property
매개 변수를 지원하는 경우 당신은 PowerShell을 v2를에서 간단하게 새로운 개체를 만들 수 있습니다
굉장한, 그게 내가 원하는 물건이야!Powershell에서 switch 문을 발견 한 적은 한번도 없었습니다. 나는 그것을 좋아한다. –
'Get-Help about_switch'를 할 수있다. 정말 다목적입니다. – Joey
New-Object의 -Property 스위치는 +1입니다. –