'awk'에 해당되는 글 1건

입력을 필터링하고, 필터링된 데이터를 원하는 포멧으로 출력하기 위한 리눅스 빌트인 프로그램(명령어)은 주요하게 3가지가 있다.

grep, sed, awk

 

grep은 보통 입력에서 원하는 패턴 또는 문자열이 포함된(또는 포함되지 않은) 라인만 출력하기 위해 사용된다.

이번 글에서는 sed와 awk의 주요 명령어 사용형식에 대해서 정리한다.

 

1. sed

패턴에 일치(또는 라인번호에 일치)하는 라인에 대해 어떤 처리(치환, 삭제) 후 출력한다.

 

치환 : sed '[/패턴 or 라인범위/]s/pattern1/pattern2/g' 대상파일(pattern2를 빈값으로 하면 일치하는 텍스트만 삭제되는 효과)

일치 라인만 출력 : sed -n '/패턴 or 라인범위/p' 대상파일

삭제후 나머지 라인 출력 : sed '/패턴 or 라인범위/d' 대상파일

 

2. awk

*** 잘쓰면 개유용함***

패턴이나 조건에 일치하는 라인에 대해 (공백 또는 탭을 기준으로-default)각 필드를 포멧팅 하여 출력한다. 프로그래밍적 문법과 연산도 지원하기 때문에 복잡한 데이터 가공까지 가능하다.

 

awk '[/패턴/ or 필드조건][{printf "포멧지정자 포함 텍스트",$필드위치변수 > "출력파일"}]' 대상파일

awk -f awk명령어파일 대상파일

awk 'BEGIN{awk내장함수 or 명령어 | getline item;awk처리액션...}[/패턴/ or 필드조건]{레코드별 액션}END{모든행 처리 후 액션}'

*BEGIN만 사용하면 입력파일 없이 액션 부분에 쉘 명령어를 사용하여 원하는 출력을 만들어낼 수 있다.

*awk 빌트인 변수와 빌트인 함수를 잘 사용하면 강려크하다.

 

3. 유용한 awk 빌트인 함수

3.1. 문자열함수

sub, gsub, index, length, substr, match, split, sprint, toupper, tolower

3.2. 수학함수

int, log, rand, srand, sin, cos

3.3. 시간함수

systime, strftime

3.4. 입력읽기 함수

getline: 파이프라인(|) 뒤에서 앞 명령어로 출력된 라인을 입력받거나, 장치(파일)로부터 앞에서 입력리다이렉션(<)을 받는다.

반환값은 입력된 라인이 존재하면 1, 존재하지 않으면 0, 에러시 -1 이다.(falsy 값이므로 루프나 조건문에 사용가능)

e.g. "date" | getline d; getline data < "/dev/tty"; getline data < "/etc/passwd"

3.5. 리눅스 명령어 실행함수

system

 

4. 유용한 awk 빌트인 변수

NF: 현재 레코드 필드 갯수

 

NR: 현재 레코드 번호(1부터 시작)

FNR: 파일의 전체 레코드 갯수

 

FS: 입력필드 분리자(기본값 공백)

OFS: 출력필드 분리자(기본값 공백)

 

RS: 입력레코드 분리자(기본값 newline: \n)

ORS: 출력레코드 분리자(기본값 newline: \n)

 

RLENGTH: match 함수에 의해 매칭된 문자열 길이

RSTART: match 함수에 의해 매칭된 문자열의 offset(매칭시작인덱스)

 

IGNORECASE: 정규표현식과 문자 비교처리시 대소문자 구분여부(0: 구분안함, 1: 구분함. 기본값 1)

ARGC: 인자갯수

ARGV: 인자배열

 

 

 

e.g. 특정 필드의 값이 특정 패턴에 매칭되면 수행하는 awk

netstat.awk
#!/bin/awk
BEGIN{
        pring "BEGIN\n";
        cnt = 0;
}
{
        if ($3 ~ /S/) {
                cnt++;
                printf "NO:%d.\tNR:%d.\tFNR:%d\t%s\n", cnt, NR, FNR, $0;
        }
}
END{
        printf "cnt: %d\nEND\n", cnt;
}
netstat.txt

(읽을 파일 만들기)

netstat -r > netstat.txt

 

확인커맨드

awk -f netstat.awk netstat.txt
블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,