awk
리눅스/리눅스명령어 / 2012. 2. 15. 17:35
1. awk ?
awk는 데이터 양식이나 문서나 혹은 자룔르 처리하여 다른 형태의 문서 또는 결과물을 출력하는데 사용한다.
2. awk 의 구조
- 시작 (BEGIN) : 입력데이터를 실행하기에 적합한 형태로 바꾸어 주는 단계
- 실행 (Routine) : 잘 덩리된(정규화된) 데이터를 실제 루틴으로 처리하는 단계
- 종료 (END) : 데이터가 처리된 후에 결과의 추가 출력
3. awk 의 사용
일반적으로 grep 과 같이 사용된다.
1. grep 을 이용하여 데이터 파일의 구조 확인
2. 정규화가 가능하지를 확인하고 sed로 테스트 한후에 awk 가 처리할수 있을정도로
정규화되있다면 awk를 사용
3. sed로 정규화된 양식을 awk 로 처리
4. awk 의 옵션
5. awk 의 응용
6. 예문
1에서 10까지 출력
현재 디렉토리의 파일들이 이름만 출력
연재 디렉토리의 파일 이름중에 소문자 알파벳이 포함된 파일명은 출력하지 않음
awk는 데이터 양식이나 문서나 혹은 자룔르 처리하여 다른 형태의 문서 또는 결과물을 출력하는데 사용한다.
2. awk 의 구조
- 시작 (BEGIN) : 입력데이터를 실행하기에 적합한 형태로 바꾸어 주는 단계
- 실행 (Routine) : 잘 덩리된(정규화된) 데이터를 실제 루틴으로 처리하는 단계
- 종료 (END) : 데이터가 처리된 후에 결과의 추가 출력
3. awk 의 사용
일반적으로 grep 과 같이 사용된다.
1. grep 을 이용하여 데이터 파일의 구조 확인
2. 정규화가 가능하지를 확인하고 sed로 테스트 한후에 awk 가 처리할수 있을정도로
정규화되있다면 awk를 사용
3. sed로 정규화된 양식을 awk 로 처리
■■■■ ■■ ■■■■ ■ ■■■■■■■ ■
■■ ■■ ■■ ■■ ■■■■■■■■■ ■■
■■■■■■■■■■ ■■ ■■ ■■ ■ ■
위의 데이터 형식은 아래의 형식으로 바뀌게 된다.
R1 ■■■■ ■■ ■■■■ ■ ■■■■■■■ ■
R2 ■■ ■■ ■■ ■■ ■■■■■■■■■ ■■
R3 ■■■■■■■■■■ ■■ ■■ ■■ ■ ■
F1 F2 F3 F4 F5 F6
$1 $2 $3 $4 $5 $6
만약 awk 로 위의 데이터를 출력하면
awk '{print $1}' 위의데이터
■■■■
■■
■■■■■■■■■■
이렇게 출력된다.
■■ ■■ ■■ ■■ ■■■■■■■■■ ■■
■■■■■■■■■■ ■■ ■■ ■■ ■ ■
위의 데이터 형식은 아래의 형식으로 바뀌게 된다.
R1 ■■■■ ■■ ■■■■ ■ ■■■■■■■ ■
R2 ■■ ■■ ■■ ■■ ■■■■■■■■■ ■■
R3 ■■■■■■■■■■ ■■ ■■ ■■ ■ ■
F1 F2 F3 F4 F5 F6
$1 $2 $3 $4 $5 $6
만약 awk 로 위의 데이터를 출력하면
awk '{print $1}' 위의데이터
■■■■
■■
■■■■■■■■■■
이렇게 출력된다.
awk [option] 'script' [file]
4. awk 의 옵션
-Fc : field separator 지정 (c 가 구분자이며 기본은 공백으로 설정)
-v 변수=값 : 스크립트를 실행하기 전에 미리 변수에 값을 지정
-f : 스크립트 파일을 지정
-v 변수=값 : 스크립트를 실행하기 전에 미리 변수에 값을 지정
-f : 스크립트 파일을 지정
5. awk 의 응용
패턴 {동작}
커맨드 라인에서는 패턴, 동작 전체를 단일 따옴표(')로 묶어야 한다.
- 패턴만 있는 경우 : 패턴과 일치하는 라인을 화면에 출력
- 동작만 있는 경우 : 모든 라인이 동작의 대상이 됨
커맨드 라인에서는 패턴, 동작 전체를 단일 따옴표(')로 묶어야 한다.
- 패턴만 있는 경우 : 패턴과 일치하는 라인을 화면에 출력
- 동작만 있는 경우 : 모든 라인이 동작의 대상이 됨
패턴
- /정규식표현/ : 정규식으로 표현된 패턴과 일치 여부
- 비교연산 : 숫자, 알파벳 모두 사용가능
- 패턴 매칭 연산 : ~ 일치하는 부분 , !~ 일치하지 않는 부분
- BEGIN : 첫번째 레코드가 읽혀지기 전에 어떤 동작을 정의
- END : 마지막 레코드가 모두 읽혀진 후에 어떤 동작을 정의
동작
- 동작은 모두 {}로 둘러싸야 한다.
- /정규식표현/ : 정규식으로 표현된 패턴과 일치 여부
- 비교연산 : 숫자, 알파벳 모두 사용가능
- 패턴 매칭 연산 : ~ 일치하는 부분 , !~ 일치하지 않는 부분
- BEGIN : 첫번째 레코드가 읽혀지기 전에 어떤 동작을 정의
- END : 마지막 레코드가 모두 읽혀진 후에 어떤 동작을 정의
동작
- 동작은 모두 {}로 둘러싸야 한다.
시스템 변수
시스템 변수 | 설명 |
FILENAME | 현재 파일명 |
FS | 입력 필드 구분 기본 : 공백 |
NF | 현재 레코드 필드 갯수 |
NR | 현재 레코드 번호 |
OFMT | 숫자에 대한 출력 포맷 기본 : $.6g |
OFS | 출력 필드 구분 기본 : 빈줄 |
ORS | 출력 레코드 구분 기본 : newline |
RS | 입력 레코드 구분 기본 : newline |
$0 | 입력 레코드 |
$n | 입력 레코드의 N번째 필드 |
ARGC | 커맨드 라인의 인자 개수 |
ARGV | 커맨드 라인 인자를 포함하는 배열 |
ENVIRON | 환경 변수들을 모아둔 관계형 배열 |
FNR | NR과 동일 단지 현재 파일에 적용된다는 점이 다름 |
RSTART | 지정한 매칭 연산을 만족하는 문자열의 맨 앞부분 |
RLENGTH | 지정한 매칭 연산을 만족하는 문자열의 길이 |
연산자
산술연산자 | =, +=, -=, *=, /=, %= |
조건연산자 |
(condition)? (true) : (fales) |
논리연산자 | ||, &&, ! |
패턴연산자 | ~, !~ |
비교연산자 | <, <=, >, >=, !=, == |
증감연산자 | ++, -- |
필드참조 | $ |
제어문
문법 자체는 C언어의 제어문과 같다.
- break
- continue
- do { Routine } while (condition)
- exit
- for ( init ; condition ; re ) { Routine }
- if ( condition ) { Routine } else { Routine }
- while (condition) { Routine }
- return
문법 자체는 C언어의 제어문과 같다.
- break
- continue
- do { Routine } while (condition)
- exit
- for ( init ; condition ; re ) { Routine }
- if ( condition ) { Routine } else { Routine }
- while (condition) { Routine }
- return
함수
- 문자열 함수
- 수학 함수
- 입출력 함수
- 문자열 함수
함수명 | 설명 |
gsub(r, s) |
입력 문자열 전부에 걸쳐 정규식표현 r을 문자열 s로 치환한다. |
gsub(r, s1, s2) |
입력문자열 s2 에서 정규식 표현 r을 문자열 s1 으로 치환한다. |
index(s1, s2) |
s1에서 s2의 위치를 넘겨준다. 없다면 0 |
length(arg) | 인자의 길이를 넘겨준다. |
match(s, r) |
문자열 s에서 정규식표현 r과 매칭 되는 부분의 위치를 넘겨준다. |
split(string, array[, seperator]) |
구분자를 기준으로(기본:공백)해서 지정한 문자열을 배열로 만든다. |
sub(r, s) , sub(r, s1, s2) |
gsub 와 동일 정규식식표현과 일치하는 문자열이 여러개라도 처음 한 문자열만 치환 |
substr(s, m) |
문자열 s 에서 m번째 위치에서 끝까지 문자열을 넘겨준다. |
substr(s, m, n) |
문자열 s 에서 m번째 부터 n번째까지의 문자열을 넘겨준다 |
tolower(string) | 대문자를 소문자로 바꾼다. |
toupper(string) | 소문자를 대분자로 바꾼다. |
- 수학 함수
함수명 | 설명 |
atan2(x, y) |
archtangent 값 |
cos(x) |
cos 값 |
exp(x) |
자연대수 e의 제곱 |
int(x) |
정수형으로 반환 |
log(x) |
로그 |
rand() |
0에서 1까지의 랜덤수 |
sin(x) |
sin 값 |
sqrt(x) |
제곱근 |
srand(expr) |
인자를 가진 난수(없으면 시간을 가지고 난수 발생) |
- 입출력 함수
함수명 | 설명 |
close(filename) |
지정한 파일을 닫는다. |
close(cmd) |
지정한 명령어 파이프를 닫는다. |
delete array[element] |
지정한 배열요소를 지운다. |
getline() |
다음 레코드를 읽어 들인다. |
getline [variable] [< "filename"] |
파일에서 읽어드린다. |
next |
다음 레코드를 입력받는다. |
print [args] [> "filename"] |
인자를 출력한다 |
printf "format" [,exp] [> "filename"] |
형식에 맞춰 인자를 출력한다. |
sprintf(format [,exp]) |
printf와 마찬가지로 사용되지만 값을 리턴하기만 하고 출력은 하지 않는다. |
system(cmd) |
시스템 내부 명령어를 실행한다. |
6. 예문
1에서 10까지 출력
awk 'BEGIN { for (i = 1;i<=10;i++) print i }'
현재 디렉토리의 파일들이 이름만 출력
ls -al | awk '{print $9}'
연재 디렉토리의 파일 이름중에 소문자 알파벳이 포함된 파일명은 출력하지 않음
ls -al | awk '/^[a-z]/{ print $9 }'
'리눅스 > 리눅스명령어' 카테고리의 다른 글
VI 명령어 (7) | 2012.06.14 |
---|---|
리눅스 기본 명령어 (3) | 2012.02.15 |
리눅스 퍼미션 permission (1) | 2012.02.15 |
vlan vconfig (3) | 2012.02.15 |
sysctl 명령어 (2) | 2012.02.15 |