linux awk 명령어 사용법
리눅스 커맨드라인에서 텍스트를 다루는 다양한 작업을 해야 한다면, 정말 유용한 필수 툴 중 하나가 바로 awk 일 것입니다. 본 포스트에서는 awk란 무엇인지, 어떻게 동작하는지, 어떻게 사용하는지에 대해 소개합니다.
awk 커맨드란?
awk는 텍스트 파일의 내용을 다양한 방법으로 처리 혹은 가공할 수 있게 해주는 툴입니다. 패턴을 지정해서 특정 데이터 검색을 하거나, 추출할 수도 있습니다.
awk의 동작 방식
awk가 어떤 방식으로 동작하는지를 이해하면, 향후 어떤 상황에서 awk를 쓰면 좋겠다고 계획하는데 분명 도움이 될 것입니다. awk는 텍스트 파일을 라인 단위로 읽으면서 검색이든 데이터 추출이든 사용자가 지정한 오퍼레이션을 수행합니다.
기본적인 명령 구조는 아래와 같습니다.
$ awk 'pattern {action}' filename
– pattern: awk를 통해 데이터를 찾을 때의 패턴
– action: 패턴과 일치하는 데이터를 찾았을 때 무엇을 하고자 하는가? ()
– filename: awk로 처리하고 싶은 텍스트 데이터 파일
awk 사용 예
awk의 몇몇 사용 예는 아래와 같습니다.
특정 컬럼 프린트하기
$ awk '{print $1}' file.txt
정형화된 파일 file.txt를 파싱하여, 첫 번째 토큰을 출력해 줍니다.
토큰 숫자는 1부터 시작합니다.
특정 패턴 검색
$ awk '/info/' file.txt
$ awk '/info/ {print}' file.txt
명령어 print를 명시적으로 사용할 수도 있고, 생략할 수도 있습니다.
file.txt로부터 info라는 문자열이 포함된 레코드를 찾아서 출력해 줍니다.
필터 조건 추가
$ awk '{if $1 >= 50} print($3)' file.txt
$ awk '$1 >= 50 {print $3}' file.txt
$ awk '{if ($2 == "Male") print($3)}' file.txt
첫번째 예를 보자면, 1번 토큰 값이 50 이상이면 3번 토큰 값을 출력하라는 뜻입니다.
awk에서는 위와 같이 조건을 부여해서 조건부 필터링을 할 수 있습니다.
내장 함수 사용
$ awk '{length($1), substr($2, 0, 2)}' file.txt
length(), substr() 등과 같은 내장 함수를 사용하여 원하는 값을 추출, 가공할 수도 있습니다.
문자열 포매팅
$ awk -F: '{printf "Name: %s, Department: %s\n", $1, $2}' file.txt
file.txt의 첫번째, 두번째 토큰을 각각 Name:이름, Department:부서 형식으로 출력해 줍니다.