[질문] awk BEGIN 있고 없고 차이..?
글쓴이: doodoo / 작성시간: 금, 2010/01/15 - 5:11오후
수학 함수 좀 프린트해 볼려고...
다음과 같이....
awk '{print cos(1)/ sin(1), log(10)}'
했더니...
프롬프트가 안 떨어지고...control+c 로 끝내니깐 그제사 나오네요...
그래서 검색해서
awk 'BEGIN{print cos(1)/ sin(1), log(10)}' 게 넣더니...금방 나와 주네요..
원래... awk '{print $1}' 등으로 많이 써서 개념이 좀 없는데...왜 꼭 BEGIN 을 넣어야
프로그램이 끝날 까요?
PS 설치활용에 써야하나..아니면 여기더 적어야 하나 잠시 망설였네요.
Forums:
위키 참조
BEGIN이 뭔지에 대해서는 http://wiki.kldp.org/wiki.php/Awk 를 보세요.
네...그니깐... 그건
네...그니깐...
그건 읽었는데..여전히 모르겠다는거죠.(2% 부족인가요?)
실제로
awk 'END{print cos(1)/ sin(1), log(10)}' 도 않되고....
awk '{print cos(1)/ sin(1), log(10)}' 도 않된다는 거죠.
단순 실행 같으면 어느부분...시작, 중간처리, 끝 셋중에..어느 부분에서나 실행 할수 있을것 같은데요.
awk '{print $1}' aa.txt 등과 다른점이 없어 보이는데....ㅠㅠ
BEGIN이 있으면
awk는 패턴 매칭 언어이고, 매칭의 대상이 되는 자료가 있어야 합니다. man awk에 의하면 Data input is read from the list of files on the command line or from standard input when the list is empty. 라고 하네요. awk에 아무 입력이 없을 경우에는 이 입력을 대기하고 있기 때문에 패턴 매칭까지 가지 않아서 그에 해당하는 구문이 실행되지 않아 결과가 나오지 않는 겁니다. {} 구문만 있을 경우 대기 상태에서 아무 거나 입력하고 엔터를 치면 결과가 나오는 걸 볼 수 있을 겁니다.
BEGIN을 주면 BEGIN은 모든 패턴에 앞서 실행되는 패턴이기 때문에 따로 입력을 기다릴 필요 없이 BEGIN에 해당하는 구문이 실행되는 것이겠구요.
END만 있는 경우에는 END까지 가기 전에 정의되지 않은 패턴 부분에서 걸리는 게 아닌가 합니다. 이 경우 대기 상태에서 ^C 말고 ^D로 완료하면 정상적으로 종료가 되면서 END 패턴에 걸려서 결과가 나오는 걸 볼 수 있습니다.
표준입력, 표준출력, 표준에러에 대해서는 범위를 넘어서는 내용이니 혹시 모르시면 다른 걸 찾아보세요.
아...그렇게
아...그렇게 되는거네요...감사합니다.
혹시 다음과 같은 함수를 만들었는데...맞는지 (사실은 인터넷에서 모두 찿아서 끼워 넣었어요.)
확인할 수 있을까요?
수학 쪽은 잼병이라...ㅠㅠ
댓글 달기