1. awk ?
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}' 위의데이터
■■■■
■■
■■■■■■■■■■
이렇게 출력된다.
4. awk 의 옵션
-v 변수=값 : 스크립트를 실행하기 전에 미리 변수에 값을 지정
-f : 스크립트 파일을 지정
5. awk 의 응용
커맨드 라인에서는 패턴, 동작 전체를 단일 따옴표(')로 묶어야 한다.
- 패턴만 있는 경우 : 패턴과 일치하는 라인을 화면에 출력
- 동작만 있는 경우 : 모든 라인이 동작의 대상이 됨
- /정규식표현/ : 정규식으로 표현된 패턴과 일치 여부
- 비교연산 : 숫자, 알파벳 모두 사용가능
- 패턴 매칭 연산 : ~ 일치하는 부분 , !~ 일치하지 않는 부분
- 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
- 문자열 함수
함수명 | 설명 |
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까지 출력
현재 디렉토리의 파일들이 이름만 출력
연재 디렉토리의 파일 이름중에 소문자 알파벳이 포함된 파일명은 출력하지 않음
'리눅스 쉘 스크립트' 카테고리의 다른 글
Find 응용 (0) | 2019.08.21 |
---|---|
awk 명령어 예제 (0) | 2018.01.16 |
find 사용하기 (0) | 2018.01.15 |
grep 으로 다중 문자열 검색 (1) | 2018.01.15 |
grep 정규 표현식 패턴 예제 두 가지 (0) | 2018.01.15 |