Windows PowerShell에서 파일을 한 줄씩 읽는 방법

  1. Get-ContentForEach 루프를 사용하여 PowerShell에서 파일을 한 줄씩 읽기
  2. Get-ContentForeach-Object를 사용하여 PowerShell에서 파일을 한 줄씩 읽기
  3. PowerShell에서 [System.IO.File] 클래스를 사용하여 파일을 한 줄씩 읽기
  4. PowerShell에서 System.IO.StreamReader 클래스를 사용하여 파일을 한 줄씩 읽기
  5. 결론
Windows PowerShell에서 파일을 한 줄씩 읽는 방법

Windows PowerShell에서는 Get-Content cmdlet을 사용하여 파일에서 파일을 읽을 수 있습니다. 그러나 이 cmdlet은 파일의 전체 내용을 한 번에 메모리로 로드하므로 큰 파일에서는 실패하거나 멈출 수 있습니다.

이 문제를 해결하기 위해, 파일을 한 줄씩 읽을 수 있으며, 이 기사는 그 방법을 보여줄 것입니다.

시작하기 전에 여러 줄이 포함된 샘플 텍스트 파일을 만드는 것이 좋습니다. 예를 들어, 다음 줄이 포함된 file.txt를 생성했습니다.

file.txt:

one
two
three
four
five
six
seven
eight
nine
ten

Microsoft에 따르면 정규 표현식은 텍스트를 일치시키기 위해 사용되는 패턴입니다. 이것은 리터럴 문자, 연산자 및 기타 구조로 구성될 수 있습니다. 이 기사는 $regex라는 표준 변수와 관련된 다양한 스크립트를 시도할 것입니다.

Get-ContentForEach 루프를 사용하여 PowerShell에서 파일을 한 줄씩 읽기

우리는 처음에 Get-Content cmdlet이 큰 파일을 로드할 때 결점이 있음을 논의했으며, 이 cmdlet은 파일의 내용을 한 번에 메모리로 로드합니다. 그러나 foreach 루프를 사용하여 라인을 하나씩 로드함으로써 개선할 수 있습니다.

예제 코드:

foreach ($line in Get-Content .\file.txt) {
    if ($line -match $regex) {
        Write-Output $line
    }
}

프로세스에 대한 단계별 설명은 다음과 같습니다:

  1. 파일 내용 가져오기:

    우리는 Get-Content cmdlet을 사용하여 파일의 내용을 읽는 것으로 시작합니다.

    Get-Content .\file.txt
    

    "file.txt"를 파일 경로로 교체합니다.

  2. 각 줄 반복 처리:

    다음으로, 파일의 각 줄을 반복 처리하기 위해 ForEach 루프를 사용합니다. 루프는 각 줄을 하나씩 변수 $line에 할당합니다.

    루프 내에서는 필요에 따라 각 줄을 처리하는 코드를 Write-Host $line 대신 사용할 수 있습니다. 이 예에서는 Write-Host를 사용하여 각 줄을 단순히 표시하고 있지만, 원하는 작업을 수행할 수 있습니다.

Get-ContentForeach-Object를 사용하여 PowerShell에서 파일을 한 줄씩 읽기

PowerShell에서 Get-ContentForeach-Object를 사용하여 파일을 한 줄씩 읽으려면 다음 단계를 따르십시오:

  1. Get-Content cmdlet 사용:

    우리는 Get-Content cmdlet을 사용하여 파일의 내용을 읽는 것으로 시작합니다. Get-Content cmdlet은 파일의 각 줄을 읽고 파이프라인에서 객체로 출력합니다.

    powershellCopy codeGet-Content -Path "example.txt" | ForEach-Object {
        # Process each line here
        $_  # $_ represents the current line
    }
    

"example.txt"를 파일 경로로 교체합니다.

  1. Foreach-Object 루프:

    다음으로, 우리는 Foreach-Object cmdlet(%Foreach-Object의 별칭임)을 사용하여 파이프라인에서 각 줄을 반복합니다. 스크립트 블록(코드가 {} 안에 있음) 내에서 $_를 사용하여 현재 처리 중인 줄을 사용할 수 있습니다.

    powershellCopy codeGet-Content -Path "example.txt" | ForEach-Object {
        # Process each line here
        $_  # $_ represents the current line
    }
    

    이 루프 내에서 각 줄에 대해 필요한 작업을 수행할 수 있습니다.

전체 작동 코드 예제

다음은 파일을 한 줄씩 읽고 각 줄을 표시하는 전체 작동 코드 예제입니다:

powershellCopy code# Specify the path to the file
$filePath = "example.txt"

# Check if the file exists
if (Test-Path $filePath) {
    # Read the file line by line and process each line
    Get-Content -Path $filePath | ForEach-Object {
        # Process each line here
        Write-Host $_
    }
} else {
    Write-Host "File not found: $filePath"
}

이 코드에서:

  • 우리는 $filePath 변수를 사용하여 파일의 경로를 지정합니다.
  • 우리는 Test-Path cmdlet을 사용하여 파일이 존재하는지 확인합니다.
  • 파일이 존재하는 경우, 우리는 Get-Content를 사용하여 내용을 읽고 Foreach-Object에 전달하여 처리합니다.
  • Foreach-Object 스크립트 블록 내에서 우리는 Write-Host $_를 사용하여 각 줄을 표시합니다.

PowerShell에서 [System.IO.File] 클래스를 사용하여 파일을 한 줄씩 읽기

PowerShell에서 [System.IO.File] 클래스를 사용하여 파일을 한 줄씩 읽으려면 다음 단계를 따르십시오:

  1. 파일 경로 지정:

    읽고자 하는 파일의 경로를 지정하는 것으로 시작합니다. "example.txt"를 파일의 실제 경로로 교체합니다.

    powershellCopy code
    $filePath = "example.txt"
    
  2. 파일 존재 여부 확인:

    파일을 읽기 전에 Test-Path cmdlet을 사용하여 파일이 존재하는지 확인하는 것이 좋은 관행입니다:

    powershellCopy codeif (Test-Path $filePath) {
        # File exists, proceed with reading
    } else {
        Write-Host "File not found: $filePath"
    }
    
  1. 파일을 한 줄씩 읽기:

    파일이 존재하는지 확인한 후, [System.IO.File] 클래스를 사용하여 파일을 한 줄씩 읽을 수 있습니다. 그 코드입니다:

    powershellCopy codetry {
        $lines = [System.IO.File]::ReadLines($filePath)
        foreach ($line in $lines) {
            # Process each line here
            Write-Host $line
        }
    } catch {
        Write-Host "Error reading the file: $_"
    }
    

    이 코드에서:

    • 우리는 [System.IO.File] 클래스의 ReadLines 메서드를 사용하여 파일을 한 줄씩 읽고, $lines 변수에 줄을 저장합니다.
    • 그런 다음 foreach 루프를 사용하여 $lines의 각 줄을 반복해서 처리합니다. 이 예에서는 Write-Host를 사용하여 각 줄을 단순히 표시하고 있지만, 원하는 작업을 수행할 수 있습니다.

전체 작동 코드 예제

다음은 파일을 한 줄씩 읽고 각 줄을 표시하는 전체 작동 코드 예제입니다:

powershellCopy code# Specify the path to the file
$filePath = "example.txt"

# Check if the file exists
if (Test-Path $filePath) {
    try {
        # Read the file line by line
        $lines = [System.IO.File]::ReadLines($filePath)
        foreach ($line in $lines) {
            # Process each line here
            Write-Host $line
        }
    } catch {
        Write-Host "Error reading the file: $_"
    }
} else {
    Write-Host "File not found: $filePath"
}

이 코드에서:

  • 우리는 $filePath 변수를 사용하여 파일의 경로를 지정합니다.
  • 우리는 Test-Path를 사용하여 파일이 존재하는지 확인합니다.
  • 파일이 존재하는 경우, 우리는 [System.IO.File]::ReadLines() 메서드를 사용하여 파일을 한 줄씩 읽고 foreach 루프를 사용하여 각 줄을 처리합니다.
  • 파일 읽기 중 발생할 수 있는 모든 예외를 포착하기 위해 오류 처리도 포함합니다.

PowerShell에서 System.IO.StreamReader 클래스를 사용하여 파일을 한 줄씩 읽기

PowerShell에서 System.IO.StreamReader 클래스를 사용하여 파일을 한 줄씩 읽으려면 다음 단계를 따르십시오:

  1. 파일 경로 지정:

    읽고자 하는 파일의 경로를 지정하는 것으로 시작합니다. "example.txt"를 파일의 실제 경로로 교체합니다.

    powershellCopy code
    $filePath = "example.txt"
    
  2. 파일 존재 여부 확인:

    파일을 읽기 전에 Test-Path cmdlet을 사용하여 파일이 존재하는지 확인하는 것이 좋은 관행입니다:

    powershellCopy codeif (Test-Path $filePath) {
        # File exists, proceed with reading
    } else {
        Write-Host "File not found: $filePath"
    }
    
  3. 파일을 한 줄씩 읽기:

    파일이 존재하는지 확인한 후, System.IO.StreamReader 클래스를 사용하여 파일을 한 줄씩 읽을 수 있습니다. 그 코드입니다:

powershellCopy codetry {
    $reader = [System.IO.StreamReader]::new($filePath)
    while ($reader.Peek() -ge 0) {
        $line = $reader.ReadLine()
        # Process each line here
        Write-Host $line
    }
    $reader.Close()
} catch {
    Write-Host "Error reading the file: $_"
}

이 코드에서:

  • 우리는 [System.IO.StreamReader]::new($filePath)를 사용하여 System.IO.StreamReader의 새 인스턴스를 생성합니다. 여기서 $filePath는 파일의 경로입니다.
  • 우리는 while 루프를 사용하여 파일을 한 줄씩 읽습니다. $reader.Peek() -ge 0 조건은 파일 끝에 도달할 때까지 계속 읽도록 보장합니다.
  • 루프 내에서는 $reader.ReadLine()을 사용하여 각 줄을 읽고 필요에 따라 처리합니다. 이 예에서는 Write-Host를 사용하여 각 줄을 단순히 표시하고 있지만, 원하는 작업을 수행할 수 있습니다.
  • 마지막으로, 파일 리소스를 해제하기 위해 $reader.Close()를 사용하여 StreamReader를 닫습니다.

전체 작동 코드 예제

다음은 파일을 한 줄씩 읽고 각 줄을 표시하는 전체 작동 코드 예제입니다:

powershellCopy code# Specify the path to the file
$filePath = "example.txt"

# Check if the file exists
if (Test-Path $filePath) {
    try {
        # Create a StreamReader to read the file
        $reader = [System.IO.StreamReader]::new($filePath)

        # Read the file line by line
        while ($reader.Peek() -ge 0) {
            $line = $reader.ReadLine()
            # Process each line here
            Write-Host $line
        }
        
        # Close the StreamReader
        $reader.Close()
    } catch {
        Write-Host "Error reading the file: $_"
    }
} else {
    Write-Host "File not found: $filePath"
}

이 코드에서:

  • 우리는 $filePath 변수를 사용하여 파일의 경로를 지정합니다.
  • 우리는 Test-Path를 사용하여 파일이 존재하는지 확인합니다.
  • 파일이 존재하는 경우, 우리는 System.IO.StreamReader 인스턴스를 생성하여 파일을 한 줄씩 읽고 while 루프를 사용하여 각 줄을 처리합니다.
  • 파일 읽기 중 발생할 수 있는 모든 예외를 포착하기 위해 오류 처리도 포함합니다.

결론

요약하자면, PowerShell은 파일을 한 줄씩 읽기 위한 여러 가지 다양한 방법을 제공하여 다양한 스크립팅 및 자동화 필요를 충족합니다. Get-ContentForEach 루프는 단순하고 읽기 쉬운 작업에 적합한 사용자 친화적인 선택입니다. Get-ContentForeach-Object는 유연성을 높여주어 파이프라인 내에서 더 복잡한 작업 및 필터링 작업에 적합합니다.

더 높은 제어와 포괄적인 오류 처리가 필요한 시나리오에서는 [System.IO.File] 클래스가 강력한 솔루션을 제공합니다. 이 방법은 파일 작업을 세밀하게 조정하고 예외를 우아하게 처리할 수 있게 하여 견고하고 오류 저항성이 높은 스크립트에 적합합니다.

큰 파일을 다루고 메모리 효율성이 중요한 상황에서는 System.IO.StreamReader 클래스가 돋보입니다. 이 클래스는 파일을 효율적으로 읽을 수 있게 하여 메모리 리소스를 보다 효과적으로 관리하므로 대규모 데이터 세트를 원활하게 처리할 수 있습니다.

궁극적으로, 어떤 방법을 선택하는지는 특정 스크립트 요구 사항, 파일 크기 및 처리의 복잡성에 따라 달라집니다. 이러한 방법을 활용함으로써 PowerShell에서 파일을 자신 있게 한 줄씩 읽을 수 있으며, 자동화 작업 흐름에서 다양한 파일 관련 작업을 효과적으로 처리할 수 있습니다.

튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

관련 문장 - PowerShell File