[질문] awk BEGIN 있고 없고 차이..?

doodoo의 이미지

수학 함수 좀 프린트해 볼려고...
다음과 같이....
awk '{print cos(1)/ sin(1), log(10)}'
했더니...

프롬프트가 안 떨어지고...control+c 로 끝내니깐 그제사 나오네요...

그래서 검색해서
awk 'BEGIN{print cos(1)/ sin(1), log(10)}' 게 넣더니...금방 나와 주네요..

원래... awk '{print $1}' 등으로 많이 써서 개념이 좀 없는데...왜 꼭 BEGIN 을 넣어야
프로그램이 끝날 까요?

PS 설치활용에 써야하나..아니면 여기더 적어야 하나 잠시 망설였네요.

keizie의 이미지

BEGIN이 뭔지에 대해서는 http://wiki.kldp.org/wiki.php/Awk 를 보세요.

doodoo의 이미지

네...그니깐...

그건 읽었는데..여전히 모르겠다는거죠.(2% 부족인가요?)

실제로
awk 'END{print cos(1)/ sin(1), log(10)}' 도 않되고....

awk '{print cos(1)/ sin(1), log(10)}' 도 않된다는 거죠.

단순 실행 같으면 어느부분...시작, 중간처리, 끝 셋중에..어느 부분에서나 실행 할수 있을것 같은데요.

awk '{print $1}' aa.txt 등과 다른점이 없어 보이는데....ㅠㅠ

keizie의 이미지

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 패턴에 걸려서 결과가 나오는 걸 볼 수 있습니다.

표준입력, 표준출력, 표준에러에 대해서는 범위를 넘어서는 내용이니 혹시 모르시면 다른 걸 찾아보세요.

doodoo의 이미지

아...그렇게 되는거네요...감사합니다.

혹시 다음과 같은 함수를 만들었는데...맞는지 (사실은 인터넷에서 모두 찿아서 끼워 넣었어요.)
확인할 수 있을까요?

function asin(x) { return atan2(x, sqrt(1-x*x)) }
function acos(x) { return atan2(sqrt(1-x*x), x) }
function atan(x) { return atan2(x,1) } 
function  tan(x) { return sin(x)/cos(x) }
function pow(x,y){ return (exp(1.0 * y * log(1.0 * x))) }

수학 쪽은 잼병이라...ㅠㅠ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.