-
Linux awk 알아보기Linux & Shell 2021. 12. 4. 16:25728x90반응형
- 목차
소개.
awk 는 텍스트를 분석 및 처리하는 유닉스/리눅스의 실행파일입니다.
Aho, Weinberger, Kernighan 세 사람에 의해서 개발되어 AWK 라고 이름붙여졌구요.
awk 를 통해서 간단한 텍스트 또는 문서를 프로세싱할 수 있습니다.
이번 글에서는 awk 실행파일을 사용하는 문법과 여러 케이스들에 대해서 알아보려고 합니다.
awk 란 ?
awk 는 텍스트를 처리하는 명령어입니다.
Unix, Linux, MacOS 등에서 사용할 수 있는 실행파일로써 built-in binary file 로써 제공됩니다.
텍스트파일을 행 기반으로 처리하는 대표적인 유닉스 도구이구요.
텍스트 파일의 행은 한 줄의 Line 을 의미합니다.
텍스트의 문자를 추출할 수 있습니다.
"Andy Bob Chris Daniel" 문자열에서 띄어쓰기 공백을 기준으로 4개의 문자들을 추출할 수 있습니다.
이 과정에서 $1 ~ $4 의 변수가 사용됩니다.
echo 'Andy Bob Chris Daniel' | awk '{print "1st is " $1 " 2nd is " $2 " 3rd is " $3 " 4th is " $4}'
1st is Andy 2nd is Bob 3rd is Chris 4th is Daniel
구분자 (Delimiter) 의 변경이 가능합니다.
기본 구분자는 Space 입니다.
기본적으로는 공백을 기준으로 문자들을 구분합니다.
하지만 공백이 아닌 다양한 구분 기준이 존재할 수 있겠죠.
이러한 경우에도 구분이 가능합니다.
-F 옵션을 사용하여 구분자를 변경할 수 있습니다.
"Andy&Bob&Chris&Daniel" 문자열을 & 로 구분되어 있습니다.
echo 'Andy&Bob&Chris&Daniel' \ | awk -F'&' '{print "1st is " $1 " 2nd is " $2 " 3rd is " $3 " 4th is " $4}'
1st is Andy 2nd is Bob 3rd is Chris 4th is Daniel
특정 문자를 필터링할 수 있습니다.
awk 는 기존적으로 하나의 문자열 Line 을 처리 대상으로 취급합니다.
아래 예시는
1234567890 abcdefg 가나다라마바사
에 해당하는 문자열을 처리하는 awk 예시입니다.
3개의 라인으로 구성되구요.
- 아라비안 숫자
- 알파벳
- 한글
로 이루어진 3개의 라인입니다.
아래 예시는 "/정규표현식/ {Action}" 으로 표현되는 Filtering 예시입니다.
아라비안 숫자 필터.
echo ' 1234567890 \n abcdefg \n 가나다라마바사' | awk '/[0-9]/ {print}'
1234567890
알파벳 필터.
echo ' 1234567890 \n abcdefg \n 가나다라마바사' | awk '/[a-z]/ {print}'
abcdefg
한글 필터.
echo ' 1234567890 \n abcdefg \n 가나다라마바사' | awk '/[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/ {print}'
가나다라마바사
조건문을 적용할 수 있습니다.
File 또는 텍스트의 각 라인에 조건문을 적용할 수 있습니다.
그리고 조건의 결과를 토대로 문자열을 변형할 수도 있습니다.
조건문을 통한 필터링.
echo '9 \n 10 \n 11' | awk '$1 >= 10'
10 11
조건문을 통한 문자 변형.
조건문을 적용할 수 있습니다.
if, else if, else 를 통한 간단한 프로그래밍이 가능하구요.
조건에 따른 변형된 결과를 출력할 수 있습니다.
echo '9 \n 10 \n 11' | awk '{if ($1 == 9) {print $1" is 9"} else { print $1" is not 9" } }'
9 is 9 10 is not 9 11 is not 9
특정 문자를 치환할 수 있습니다.
$1 = New Value 와 같은 문법을 활용하여 값을 치환할 수 있습니다.
echo 1 | awk '{$1 = 100} {print}'
100
old = $1 와 같은 문법을 치환되기 이전의 값을 임시 저장할 수도 있습니다.
echo 1 | awk '{old=$1; $1 = 100} {print "old is "old ", new is "$1}'
old is 1, new is 100
조건문을 사용할 수 있습니다.
조건문의 문법은 일반적인 프로그래밍의 문법과 유사합니다.
Shell Script 의 If Statement 처럼 if [ $1 > 10 ]; fi 같은 문법이 아님에 주의하셔야 됩니다.
cat <<EOF> /tmp/numbers 1 2 3 4 5 6 7 8 9 EOF cat /tmp/numbers | awk '{if ($1 > 5) {$1 = 100} else {$1 = 10}} {print $1}'
< 출력 >
10 10 10 10 10 100 100 100 100
반응형'Linux & Shell' 카테고리의 다른 글
Linux date 알아보기 (0) 2023.09.20 [Linux] SSH (Secure Shell) (0) 2023.09.17 Linux /etc/resolv.conf (0) 2023.09.13 [linux] jq 사용법 (0) 2023.09.12 Linux File Descriptor (0) 2019.07.25