반응형

    정보

    • 업무명     : 리눅스에서 awk 명령어를 사용하는 기초적인 방법 정리

    • 작성자     : 박진만

    • 작성일     : 2020-03-14

    • 설   명      :

    • 수정이력 :

     

     내용

    [특징]

    • 리눅스에서 awk 명령어 사용방법 소개

     

    [활용 자료]

    • 없음

     

    [자료 처리 방안 및 활용 분석 기법]

    • 없음

     

    [사용법]

    • 작업 환경 구축

    • 소스 코드 작성 및 실행

    • 실행 결과 확인

     

    [사용 OS]

    • Linux (CentOS v7.0)

    • VMware Workstation Pro v15.5

     

    [사용 언어]

    • shell script (bash)

     

     소스 코드

    [들어가기]

    • awk는 하나 이상의 공백으로 구분 된 여러 열의 텍스트 데이터를 처리 할 때 유용한 도구이다. 

    • 사칙 연산 역시 가능하다.

    • 예를 들어 아래와 같은 a.txt 파일이 있다고 가정해보자

    1 2
    3 4
    • 여기서 아래의 명령을 실행하면

    awk '{print $1 * $2;}' a.txt
    # 또는
    cat a.txt | awk '{print $1 * $2;}'
    • 출력 결과는 아래와 같다.

    2
    12
    • 이 때 구분 기호는 기본적으로 하나 이상의 공백이나 탭이 사용되어 있어야 한다.

    • 그리고 공백이나 탭이 사이에 여러개가 있더라도 하나의 구분으로 간주한다.

     

    [기초적 사용법 예시]

    • 쉼표로 구분된 값 (CSV) 처리하기

      • 쉼표로 구분된 값을 처리하기 위해서는 -F 옵션에서 구분 기호를 지정할 수 있다.

      • 예를 들어 아래와 같은 b.txt 파일이 있다고 가정하자

    1,2,3
    4,5,6
    7,8,9
    • 여기서 아래의 awk 명령을 실행하면

    cat b.txt | awk -F, '{print $1}'
    • 아래의 결과가 도출된다. 즉 -F 명령으로 구분자를 지정한 후 print를 이용해 첫번째 컬럼만 출력한 형태이다.

    1
    4
    7

     

     

    • 행 번호 출력하기

      • 행 번호를 출력하기 위해서는 print 에 NR 옵션을 추가한다.

    cat b.txt | awk -F, '{print NR " " $0;}'
    1 1,2,3
    2 4,5,6
    3 7,8,9
    • 여기서 $0 은 전체 컬럼을 출력한다는 의미이다.

    • 만약 행 번호를 1이 아닌 0부터 시작하고자 한다면 아래처럼 사용할 수 있다.

    awk_example]$ cat b.txt | awk -F, '{print NR-1 " " $0;}'
    0 1,2,3
    1 4,5,6
    2 7,8,9

     

     

    • 특정 열에 특정 문자열이 존재하는 행만 출력하기

      • 아래와 같은 파일이 있다고 가정하자 (c.txt)

    a b c
    d e f
    g h i
    • 여기서 첫번째 열에서 "a" 가 있는 행만 출력하고 싶은 경우 아래와 같이 쓴다.

    cat c.txt | awk '$1=="a"'
    a b c
    • 만약 첫번째 열에서 "a" 가 없는 행만 출력하고 싶다면

    cat c.txt | awk '$1!="a"
    d e f
    g h i

     

     

    • 특정 열에 특정 패턴이 존재하는 행만 출력하기

      • 패턴을 매칭하기 위해서는 슬레시 (/) 사이에 정규식을 넣어서 사용한다. ('/pattern/') 

      • 아래의 예시는 2번째 컬럼에서 e로 시작하는 문자가 있는 행만 출력하는 예시이다.

    cat c.txt | awk '$2~/^e/'
    d e f

     

     

    • 숫자가 적힌 텍스트 파일에서 합계 / 평균 / 최대 / 최소값 계산하기

      • 아래와 같은 파일이 있다고 가정하자 (d.txt)

    100
    200
    300
    400
    500
    • 합계를 계산

    awk '{sum+=$1}END{print sum}' d.txt
    1500
    • 평균을 계산

    awk '{sum+=$1}END{print sum/NR}' d.txt
    300
    • 최댓값을 계산

    awk 'NR==1 {max=$1} {if($1 > max) max = $1} END {print max}' d.txt
    500
    • 최솟값을 계산

    awk 'NR==1 {min=$1} {if($1 < max) min = $1} END {print min}' d.txt

    100

     

     

    • 텍스트 파일의 각 행의 문자 수 구하기

      • 아래와 같은 파일이 있다고 가정하자 (e.txt)

    a
    ab
    abc
    abcd
    abcde
    • 각 행의 문자수 구하기 (바이트 아님)

    cat e.txt | awk '{print length();}'
    1
    2
    3
    4
    5

     

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

    [기상학/프로그래밍 언어]

    • sangho.lee.1990@gmail.com

    [해양학/천문학/빅데이터]

    • saimang0804@gmail.com

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음

     

    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기