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