2012년 9월 30일 일요일
2012년 9월 2일 일요일
배열의 배열
input2.dat
test2.awk
아... 허접한 코드...
1 1firstElement
1 1secondElement
2 2firstElement
2 2secondElement
2 2thirdElement
3 3firstElement
test2.awk
#!/usr/bin/bash
#
BEGIN {
arrayIndex = 1
i = 1
}
{
if ( $1 == arrayIndex ) {
myArray[arrayIndex][i] = $2
}
else {
arrayIndex += 1
i = 1
myArray[arrayIndex][i] = $2
}
i += 1
}
END {
for ( i in myArray ) {
for ( j in myArray[i] ) {
print "myArray["i"]["j"]:" myArray[i][j]
}
}
}
아... 허접한 코드...
getline
현재의 입력파일 또는 지시된 파일을 one record 만큼만 읽어들임.
표준입력파일 외의 파일을 읽어들이고 싶은 경우에는
주의점:
예시:
input.dat
auxData.dat
test.awk
OutPut
- 파일이 없으면: -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
----------------------------------------
피드 구독하기:
글 (Atom)
