트랙
/
AWK
AWK
/
연습 문제
/
간단한 보고서
간단한 보고서

간단한 보고서

학습 연습 문제

소개

숫자와 문자열

AWK는 아주 작은 언어라서 기본 데이터 타입도 몇 가지밖에 없어요. 이번 레슨에서는 숫자와 문자열을 살펴볼게요.

숫자

AWK의 숫자는 배정밀도 부동소수점 수로 구현되어 있어요. 정수, 실수, 더블 사이에는 아무런 구분이 없어요.

AWK는 8진수 상수(0으로 시작)와 16진수 상수(0x 또는 0X로 시작)를 알아들어요.

숫자 연산

표준 산술 연산자 +, -, *, /, %를 사용할 수 있어요. 거듭제곱 연산자는 ^예요. 삼각 함수, 난수 생성, 그리고 x 와 0 사이에서 가장 가까운 정수로 수를 잘라 주는 int(x) 같은 몇 가지 내장 숫자 함수도 있어요.

문자열

AWK의 문자열은 문자들의 나열이에요. 문자열 상수는 큰따옴표로 지정해요.

문자열 연산

문자열 연산은 단 하나뿐이에요. 바로 연결이에요. 연결에는 특별한 연산자가 없어요. 두 문자열을 나란히 놓기만 하면 이어져요:

BEGIN {
    hw = "Hello" "World"
    print hw
}
# => HelloWorld
Note

print는 함수가 아니라 문이에요. print에는 괄호가 필요 없어요.

AWK에는 문자열을 다루는 풍부한 함수들이 있어요. 트랙을 진행하면서 이런 함수들을 자세히 배우게 될 거예요.

숫자와 문자열 사이의 변환

숫자와 문자열을 변환하는 명시적인 연산자는 없어요. AWK가 프로그램의 문맥에 따라 암묵적으로 변환해 줘요. 덕분에 입력 필드 값을 다루는 일이 아주 간단해져요. AWK는 보통 원하는 대로 알아서 해 주거든요.

  • print x + y는 + 숫자 연산 덕분에 x와 y 변수의 값을 숫자로 변환해요.
  • print x y는 연결 연산 덕분에 x와 y 변수의 값을 문자열로 변환해요.

명시적으로 하고 싶다면 0 + x는 x 의 숫자 표현을, "" x는 x 의 문자열 표현을 만들어 줘요.

문자열에서 숫자로

AWK가 문자열을 숫자로 변환하는 방식은 헷갈릴 수 있어요. 간단히 생각하면, AWK는 문자열의 처음부터 "숫자 문자"를 읽다가 "숫자가 아닌" 문자를 만나면 멈춰요. 몇 가지 예를 볼까요:

  • "2.5"는 숫자 2.5로 변환돼요.
  • "1e3"는 숫자 1000으로 변환돼요(과학적 표기법).
  • "456abc"는 숫자 456으로 변환돼요(a는 "숫자"가 아니어서 거기서 변환이 멈춰요).
  • "abc789"는 숫자 0으로 변환돼요(문자열의 맨 앞에는 숫자가 없어요).

지침

정원 곳곳에서 측정한 값으로 친구가 보고서를 만들도록 도와주고 있어요. 안타깝게도, 친구는 데이터를 이상한 형식으로 저장해 두었어요. 각 측정값은 쉼표로 구분된 여러 개의 필드로 이루어져 있어요. 그런데 친구는 두 자리 숫자를 두 개의 열에 나누어 저장했어요.

필드 번호 의미
1 ID 번호
2 위치
3 첫 번째 측정값, 십의 자리
4 첫 번째 측정값, 일의 자리
5 두 번째 측정값, 십의 자리
6 두 번째 측정값, 일의 자리

101,house,4,2,5,4와 같은 입력 행이 있다면

  • 첫 번째 측정값은 42이고,
  • 두 번째 측정값은 54예요.

과제 1: 보고서 만들기

두 측정값의 평균을 구하고, 각 행의 결과를 다음 형식으로 출력하는 것이 과제예요.

#<id>, <label> = <average>

42와 54의 평균은 48이므로, 예시 행의 출력은 다음과 같아요:

#101, house = 48
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
AWK Exercism

간단한 보고서 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 AWK 트랙을 개념 3개연습 문제 92개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.