2012년 9월 2일 일요일

getline

현재의 입력파일 또는 지시된 파일을 one record 만큼만 읽어들임.
  • 파일이 없으면: -1
  • 읽어들일 레코드가 없으면: 0
  • 읽기에 성공하면: 1
을 반환한다.

표준입력파일 외의 파일을 읽어들이고 싶은 경우에는
while ( (getline < "fileName") > 0 ) { what_you_want_to }
로 처리해 준다.

주의점:
  • 위의 fileName으로 read-in하는 것은 한 파일당 한번만 read-in한다. 즉, 표준입력파일의 레코드를 읽어들일때 마다 처리되지 않는다. -> 보조 DATA 파일을 read-in하는데 이용.
  • getline하는 동안 FILENAME, FNR, NR은 변하지 않는다. 즉, getline이 execution하기 직전의 FILENAME, FNR, NR 값이 유지된다.


예시:

input.dat
firstLine
secondLine
thirdLine
foruthLine
fifthLine

auxData.dat
auxFirstLine
auxSecondLine
auxThirdLine

test.awk
#!/usr/bin/gawk
#

BEGIN {
}

{
    print "FILENAME:" FILENAME "/ FNR:" FNR "/ NR:" NR
    print "$0 is :" $0
    print "----------------------------------------"

    while ( (getline < "auxData.dat") > 0 ) {
    print "FILENAME:" FILENAME "/ FNR:" FNR "/ NR:" NR
    print "$0 is :" $0
    print "==========================================="
    }
}

END {
}

OutPut
FILENAME:input.dat/ FNR:1/ NR:1
$0 is :firstLine
----------------------------------------
FILENAME:input.dat/ FNR:1/ NR:1
$0 is :auxFirstLine
===========================================
FILENAME:input.dat/ FNR:1/ NR:1
$0 is :auxSecondLine
===========================================
FILENAME:input.dat/ FNR:1/ NR:1
$0 is :auxThirdLine
===========================================
FILENAME:input.dat/ FNR:2/ NR:2
$0 is :secondLine
----------------------------------------
FILENAME:input.dat/ FNR:3/ NR:3
$0 is :thirdLine
----------------------------------------
FILENAME:input.dat/ FNR:4/ NR:4
$0 is :foruthLine
----------------------------------------
FILENAME:input.dat/ FNR:5/ NR:5
$0 is :fifthLine
----------------------------------------

댓글 없음:

댓글 쓰기