프로그래밍/AWK

AWK 기본 문법: 변수와 연산자 완벽 가이드

shimdh 2025. 6. 12. 06:53
728x90

AWK는 강력한 텍스트 처리 도구로, 데이터 분석 및 처리에 있어 매우 유용한 언어입니다. 이 블로그 포스트에서는 AWK의 변수와 연산자에 대해 깊이 있게 살펴보며, 이를 통해 데이터 처리의 효율성을 높이는 방법을 알아보겠습니다.

변수의 개념

변수는 데이터를 저장하는 공간으로, 프로그램 내에서 값을 저장하고 사용할 수 있게 해줍니다. AWK에서는 두 가지 주요 종류의 변수가 있습니다:

  • 사용자 정의 변수: 사용자가 직접 생성하여 사용하는 변수입니다. 이러한 변수는 사용자가 필요에 따라 이름을 지정하고, 원하는 값을 할당하여 사용할 수 있습니다. 예를 들어, 학생의 이름이나 점수와 같은 정보를 저장하는 데 유용합니다.
  • 내장 변수: AWK가 자동으로 제공하는 특별한 변수들로, 특정 기능을 수행합니다. 이 변수들은 AWK의 동작을 제어하거나, 현재 처리 중인 데이터에 대한 정보를 제공합니다.

예시:

BEGIN {
    name = "홍길동"         # 사용자 정의 변수
    age = 30               # 또 다른 사용자 정의 변수
    print name, age       # 출력 결과: 홍길동 30
}

위의 예시에서 nameage는 사용자 정의 변수로, 각각 "홍길동"이라는 이름과 30이라는 나이를 저장하고 있습니다. 이 변수들은 프로그램의 다른 부분에서도 사용될 수 있습니다.

내장 변수를 활용하기

AWK에는 다양한 내장 변수가 있으며, 그 중 일부를 소개하겠습니다:

  • NR: 현재 레코드 번호를 나타냅니다. 이 변수는 입력된 데이터의 각 줄을 처리할 때마다 자동으로 증가합니다.
  • NF: 현재 레코드에서 필드의 개수를 나타냅니다. 이 변수는 각 줄에 포함된 데이터의 개수를 파악하는 데 유용합니다.
  • FS: 입력 필드를 구분하는 문자열(기본값은 공백)입니다. 이 변수를 통해 데이터의 구분자를 설정할 수 있습니다.

예시:

{
    print "레코드 번호:", NR   # 각 레코드에 대해 번호 출력
    print "필드 개수:", NF     # 각 레코드에 포함된 필드 개수 출력
}

위 코드는 파일의 모든 줄을 읽으며 각 줄마다 해당 줄의 레코드 번호와 필드 개수를 출력합니다. 이를 통해 데이터의 구조를 이해하고, 필요한 정보를 쉽게 추출할 수 있습니다.

연산자의 종류

AWK에서 제공하는 연산자는 크게 세 가지 범주로 나눌 수 있습니다:

  1. 산술 연산자

    • + (더하기): 두 숫자를 더합니다.
    • - (빼기): 한 숫자에서 다른 숫자를 뺍니다.
    • * (곱하기): 두 숫자를 곱합니다.
    • / (나누기): 한 숫자를 다른 숫자로 나눕니다.
    • % (나머지): 두 숫자를 나눈 후의 나머지를 구합니다.
  2. 관계 연산자

    • ==, !=, <, <=, >, >=: 값 간 비교를 수행합니다. 이 연산자들은 조건문에서 주로 사용되어 특정 조건을 만족하는지를 판단하는 데 도움을 줍니다.
  3. 논리 연산자

    • &&: 논리 AND, 두 조건이 모두 참일 때 참을 반환합니다.
    • ||: 논리 OR, 두 조건 중 하나라도 참일 때 참을 반환합니다.
    • !: NOT, 조건의 참/거짓을 반전시킵니다.

예시:

{
    if ($1 > 50) {          # 첫 번째 필드가 50보다 큰 경우 
        print $0           # 해당 행 전체 출력
    }
}

위 코드에서는 첫 번째 필드를 기준으로 조건문을 작성하여 특정 조건을 만족하는 행만 선택적으로 출력합니다. 이를 통해 데이터에서 필요한 정보만을 필터링할 수 있습니다.

복합적인 사용 사례

변수와 연산자를 조합하여 더 복잡한 작업도 수행할 수 있습니다. 아래는 학생 성적 데이터 파일에서 평균 점수를 계산하는 예제입니다.

예시:

{
    total += $2            # 두 번째 필드를 총점에 추가 
} 
END {
    average = total / NR;  # 평균 계산 
    print "평균 점수:", average;  
}

이 코드는 입력된 데이터 파일에서 두 번째 열(성적)을 합계하고 마지막에 총 학생 수(NR)로 나누어 평균 점수를 계산해 줍니다. 이와 같은 방식으로 AWK를 활용하면 대량의 데이터에서 유용한 통계 정보를 쉽게 추출할 수 있습니다.

결론

변수와 연산자는 AWK 스크립트를 작성할 때 매우 중요한 요소입니다. 이들을 적절히 활용하면 데이터를 효율적으로 처리하고 원하는 결과를 얻을 수 있습니다. 실습과 반복 학습을 통해 이러한 기본 원리를 확실히 익혀보세요! AWK의 다양한 기능을 활용하여 복잡한 데이터 처리 작업을 간편하게 수행할 수 있는 능력을 기르시기 바랍니다.

728x90