큰 텍스트 파일에 문자열이 포함된 모든 줄을 최대한 빨리 가져오시겠습니까?
Powershell에서 대용량 텍스트 파일(약 200,000줄/30MB)에 특정 문자열이 포함된 마지막 줄(또는 모든 줄)을 가능한 빨리 읽고 얻는 방법은 무엇입니까?사용 중:
get-content myfile.txt | select-string -pattern "my_string" -encoding ASCII | select -last 1
하지만 그것은 매우 깁니다 (약 16-18초).저는 마지막 파이프 없이 테스트를 했습니다.select -last 1
하지만 같은 시간입니다.
대용량 파일에서 특정 문자열의 마지막 항목(또는 모든 항목)을 더 빠르게 가져올 수 있는 방법이 있습니까?
아마도 필요한 시간일 것입니다...아니면 내가 마지막으로 원하는 대로 파일을 끝에서 더 빨리 읽을 수 있는 가능성이 있습니까?감사해요.
사용해 보십시오.
get-content myfile.txt -ReadCount 1000 |
foreach { $_ -match "my_string" }
그러면 한 번에 1000개의 레코드 청크로 파일을 읽고 각 청크에서 일치하는 항목을 찾습니다.파이프라인에는 한 번에 1000개의 라인만 있으므로 메모리 관리에 많은 CPU 시간을 낭비하지 않으므로 성능이 향상됩니다.
시도해 보셨습니까?
gc myfile.txt | % { if($_ -match "my_string") {write-host $_}}
또는 "grep"와 같은 함수를 만들 수 있습니다.
function grep($f,$s) {
gc $f | % {if($_ -match $s){write-host $_}}
}
그러면 다음과 같이 발행할 수 있습니다.grep $myfile.txt $my_string
$reader = New-Object System.IO.StreamReader("myfile.txt")
$lines = @()
if ($reader -ne $null) {
while (!$reader.EndOfStream) {
$line = $reader.ReadLine()
if ($line.Contains("my_string")) {
$lines += $line
}
}
}
$lines | Select-Object -Last 1
사용해 보셨습니까?[System.IO.File]::ReadAllLines();
이 방법은 Microsoft에 직접 연결하기 때문에 PowerShell-esque 방법보다 더 "원시"합니다.NET Framework 유형.
$Lines = [System.IO.File]::ReadAllLines();
[Regex]::Matches($Lines, 'my_string_pattern');
실패한 줄을 추출하고 이 줄을 새 파일에 쓰고 싶어서 전체 명령을 추가합니다.
get-content log.txt -ReadCount 1000 |
>> foreach { $_ -match "failed" } | Out-File C:\failes.txt
언급URL : https://stackoverflow.com/questions/21310538/get-all-lines-containing-a-string-in-a-huge-text-file-as-fast-as-possible
'programing' 카테고리의 다른 글
양식 내부 단추를 누를 때 페이지 새로 고침을 방지하려면 어떻게 해야 합니까? (0) | 2023.08.12 |
---|---|
도커는 가상 시스템과 어떻게 다릅니까? (0) | 2023.08.12 |
오류 준비 전표를 다시 준비해야 합니다. (0) | 2023.08.12 |
Swift 3 - 장치 토큰이 '32B'로 구문 분석 중입니다.YTES' (0) | 2023.08.12 |
동적 웹 모듈 3.0 -- 3.1 (0) | 2023.08.12 |