ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Linux awk 알아보기
    Linux & Shell 2021. 12. 4. 16:25
    728x90
    반응형

    - 목차

     

    소개.

    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
Designed by Tistory.