awk 숫자 지정

csb444의 이미지

안녕하세요, awk의 연산범위 지정에 대해서 질문을 올립니다.

다룰 textfile은 다음과 같이 생겼습니다.

########################
atomic position
1.0
12 0 0
0 12 0
0 0 12
C
6
Direct
0 0 0
0.2 0.2 0
0.4 0.3 0
0.6 0.6 0
0.3 0.2 0
...
#########################

이중에서 awk의 명령어를 써서, 'Direct'문자열이 나온 이후의 줄에서, 0.5 이하의 값들을 갖는 것들에 대해 연산을 하고 싶은데요.

awk'{ if($1~/Direct/){DATALINE=NR}
if(NR>DATALINE){
if(($1<0.5)&&($2<0.5)){print $0}
}
}'

위와 같이, Direct라는 줄 수를 DATALINE이라는 변수에 넣고,
if문을 두번 구성했는데요, 엉뚱하게 Direct이전의 숫자들까지 모두 연산이 되어서 고민입니다.

잘하시는 분들에게는 쉬운 문제시겠지만 본인이 프로그래밍에 너무 무지하여 이렇게 질문을 하게되었습니다.
답변에 미리 감사의 말씀을 올립니다.

익명 사용자의 이미지

AWK에서는 아직 초기화가 되지 않은 변수가 사용되면 수치 컨텍스트에서 0으로 처리됩니다. NR은 항상 0보다 크니 모두 출력이 되겠지요.

익명 사용자의 이미지

awk '{ if($1~/Direct/){a=1}
if((a==1)&&($1<0.5)&&($2<0.5)){print $0}
}' awk.test