awk
파일 또는 input 데이터로부터 레코드를 선택하고, 선택된 레코드에 포함된 값을 조작하거나 데이터화하는 프로그램이다.
AWK를 이용하면 다음과 같은 작업을 할 수 있다.
- 텍스트 파일 전체 내용 출력
- 파일의 특정 필드 출력
- 특정 필드에 문자열을 추가하여 출력
- 패턴이 포함된 레코드 출력
- 특정 필드의 연산 수행 결과 출력
- 필드 값을 비교한 결과에 따른 레코드 출력
awk 기능을 개발한 사람들의 이니셜(Alfred V. Aho, Peter J. Weinberger, Brian W. Kernighan)을 조합하여 명명되었다.
동작 방식
awk는 awk programming language로 작성된 프로그램을 실행하는데, 입력 데이터로부터 주어진 패턴을 포함하는 라인(레코드)을 탐색한 후, 라인을 발견하면 해당 라인에 지정한 작업을 수행한다.
이 과정을 입력 파일의 끝을 만날 때까지 수행한다.
개념
- 레코드 (Record) : 입력 데이터의 각 행
- 필드 (Field) : 각 레코드에 공백 문자료 구분된 값
awk 프로그램 구조
awk 프로그램의 기본 구조는 아래와 같다.
pattern { action }
이 구조는 awk 명령어에서 '' 내에 작성되어야 한다.
awk [OPTION...] 'pattern { action }' [ARGUMENT...]
pattern과 action은 생략 가능하다. pattern이 생략되면 모든 레코드에 대해서, action이 생략되는 경우 print가 적용된다.
# pattern 생략
$ awk '{ print }' ./file.txt # file.txt의 모든 레코드 출력
# action 생략
$ awk '/p/' ./file.txt # file.txt에서 p를 포함하는 레코드 출력
변수
awk 프로그램에는 다양한 표현식과 함수, 변수가 사용될 수 있다. 그중에서 가장 중요한 변수는 레코드와 필드 변수이다.
awk에서 awk는 $0, 그리고 필드는 $1, $2, $3 ... $n으로 참조할 수 있다. $NF는 필드의 총 개수를 의미한다.
BEGIN, END
awk의 패턴 중 하나로 BEGIN 키워드를 만나면 첫 번째 레코드를 처리하기 전에 BEGIN에 지정된 작업을 수행한다.
그리고 모든 레코드를 처리한 뒤 END 키워드를 만나면 END에 지정된 작업을 수행한다.
참고 문서
https://recipes4dev.tistory.com/171
https://hwan-shell.tistory.com/352