본문 바로가기
운영체제 (LNX,WIN)

awk 명령어 필드구분 및 필드수

by 날으는물고기 2012. 6. 29.

awk 명령어 필드구분 및 필드수

1. awk 필드를 구분하는 방법은 두가지이다. 하나는 FS를 세팅해주는 방법이고, 하나는 -F옵션을 통해 주는 방법이다. 주로 FS로는 여러가지 seperator를 설정하고 -F로는 하나의 seperator를 설정한다. FS를 세팅할땐,

awk 'BEGIN { FS = ", \t" } ; { print $2 }'
-> makes every area of an input line that consists of a comma followed by a space and a TAB into a field separator.

이렇게 설정이 가능하나, -F로 설정할 땐 quoting없이 -F\t 로 세팅하면 안된다, \가 쉘에서 다음 라인으로 이어진다는걸 의미하기 때문에 escape character 이기 때문에 구분자 설정이 안되어버린다-_- 탭으로 구분하려면 -Ft를 사용한다. 알파벳 t자를 가지고 구분해야 할 경우엔 아래 원문을 참고해보기 바란다.

As a special case, in compatibility mode (see Options), if the argument to -F is `t', then FS is set to the TAB character. If you type `-F\t' at the shell, without any quotes, the `\' gets deleted, so awk figures that you really want your fields to be separated with tabs and not `t's. Use `-v FS="t"' or `-F"[t]"' on the command line if you really do want to separate your fields with `t's. 

참고 사이트 : http://www.gnu.org/software/gawk/manual/gawk.html#Fields

2. NF (Number of Fields) 

awk 에서 build-in 변수인 NF는 Number of Fields 를 의미한다. NF는 해당 라인의 필드 수, $NF는 라인의 맨 마지막 필드를 리턴한다.

ex)
$ cat emp.data
Beth   4.00     0
Dan    3.75     0
Kathy  4.00    10
Mark   5.00    20
Mary   5.50    22
Susie  4.25    18
$ awk '{ print NF, $1, $NF }' emp.data
3 Beth 0
3 Dan 0
3 Kathy 10
3 Mark 20
3 Mary 22
3 Susie 18

필드수가 가변적인 파일에서 원하는 필드수를 가진 라인만을 출력해야 할 때 요긴하게 쓰인다.



출처 : http://hackest.tistory.com/

728x90

댓글