awk
awk는 Alfred Aho, Pater Weinberger, Brian Kernighan 세명이 만들었다.
이 세 명의 이니셜 하나씩을 가져와서 awk로 명명했다.
[프로그래밍 형식]
awk는 패턴과 액션을 작은 따옴표로 둘러싸서 입력하며, 입력파일을 입력한다. 입력파일을 넣지 않을시에는 입력파일 대신 표준입력(stdin)으로 받는다.
1. 파일 입력
Note
- awk ‘pattern’ filename
- awk ‘{action}’ filename
- awk ‘pattern {action}’ filename
'/패턴/' : 패턴과 일치하는 줄을 출력한다.
'{print $1}' : 공백으로 나눠진 필드의 첫번째($1)를 출력
test_file
소프트웨어 1234 1111
장인 5678 2222
정신 9012 3333
글쓰기 3456 4444
[software-craftsman]# awk '/장/' test_file
장인 5678 2222
Note
- Command | awk ‘pattern’
- Command | awk ‘{action}’
- Command | awk ‘pattern {action}’
Escape Char | Mean |
---|---|
\b | back space |
\f | form feed |
\n | newline |
\r | carriage return |
\t | tab |
\022 | octal 22 |
\c | char |
5. OFMT 변수
OFMT : Output ForMat, print 함수를 사용할 때 숫자의 출력 포멧을 제어할 수 있다. 기본 포멧은 %.6g이다. 이 포멧은 최대 전체 6자리를 가진다. "0."으로 시작하면 소수점 아래 6자리를, "0."이 아닌 숫자로 시작하면 전체 6자리를 출력하게 된다.
[software-craftsman]# awk 'BEGIN{print 1234.1234567890}'
1234.12
[software-craftsman]# awk 'BEGIN{OFMT="%.2f";print 1.1234567890}'
1.12
6. awk -f 옵션
Note
- awk -f [awk 명령파일] [awk 명령을 적용할 텍스트 파일]
[software-craftsman]# cat command
{print "테스트합니다."}
{print $1, $2, $3}
[software-craftsman]# awk -f command test_file
테스트합니다.
소프트웨어 1234 1111
테스트합니다.
장인 5678 2222
테스트합니다.
정신 9012 3333
테스트합니다.
글쓰기 3456 4444
8. NF 변수
NF에 필드의 수를 유지한다. NF의 값은 Default 100이다.
즉, 필드가 아무리 많아도 Default에서 바꾸지 않았다면, $100까지만 사용가능하다는 것이다.
9. FS (필드 분리자)
FS(필드 분리자)의 값을 변경하기 위해서는 -F옵션을 사용해야한다.
-F 다음에 적어주는 문자가 새로운 필드 분리자가 된다.
[software-craftsman]# cat test_file
소프트웨어:1234:1111
장인: 5678 2222
정신: 9012 3333
글쓰기: 3456 4444
[software-craftsman]# cat test_file | awk -F':' '{print $1}'
소프트웨어
장인
정신
글쓰기
10. 정규표현식
awk에서 정규표현식은 슬래시(/)로 둘러싸인 문자 패턴이다.
awk에서는 일반적인 정규표현식을 지원한다.
지원하지 않는 것은 아래 세가지이다.
1. \<\> : 단어
2. \(\) : 후위 참조
3. \{\} : 반복
'장인으로의 여정' 카테고리의 다른 글
[linux] cut (0) | 2016.02.22 |
---|---|
[linux command] xxd (0) | 2016.01.21 |
[bash script] log_viewer.sh (4) | 2016.01.19 |
댓글