awk를 명령이나 프로그래밍 언어로 해석할 때?

awk를 명령이나 프로그래밍 언어로 해석할 때?

나는 그것이 awk스크립트 프로그래밍 언어라는 것을 알고 있지만 때로는 명령으로 해석할 것인지 프로그램으로 해석할 것인지 혼란스럽습니다.

예. 1-여기서는 명령으로 해석합니다.:

awk '{print $2}' file.txt

예. 2-여기서는 awk 프로그램으로 해석합니다.:

awk 'BEGIN      {skip = 0} \
        skip == 0  {if (NF == 0) 
                     {skip = 1}  \
                    else 
                     {print};  \
                    next} \
        skip == 1  {print; \
                    skip = 0; \
                    next}'

에서 가져옴여기.

질문은 다음과 같습니다

  1. awk를 명령으로 해석해야 하는 경우는 언제입니까?
  2. awk는 언제 프로그램인가요?
  3. 첫 번째 예제를 명령으로 호출하는 데 문제가 있습니까 awk?

다음과 같은 것 :

awk '{print $2}' file.txt | awk '{FS=" "} {print 4}'

awk프로그램이 파이프를 사용하여 통신할 수 있다는 뜻인가요 ?

답변1

awk두 가지 호출 모드가 있습니다. 하나는 명령줄의 프로그램 텍스트를 사용하는 것이고 다른 하나는 파일의 프로그램을 사용하는 것입니다. 이것은 awk 매뉴얼 페이지의 개요에 명시되어 있습니다(Ubuntu 12.04의 mawk에 있는 내용입니다):

   mawk  [-W  option] [-F value] [-v var=value] [--] 'program text' [file
   ...]
   mawk [-W option] [-F value]  [-v  var=value]  [-f  program-file]  [--]
   [file ...]

첫 번째 형식을 프로그램이라고 부를지 여부는 사용하려는 프로그램의 정의에 따라 다릅니다. 나는 두 가지 형태 모두 프로그램을 포함한다고 말하고 싶습니다. 따라서 첫 번째 프로그램은 명령줄 인수로 지정됩니다. 두 가지 예 모두 옵션이 포함되어 있지 않으므로 두 가지 예 모두 첫 번째 형식입니다 -f. 두 번째 예에 여러 줄의 명령줄 인수가 있다는 것은 이와 관련이 없습니다.

이는 에 고유한 것이 아닙니다 awk. 예를 들어 Python은 기본적으로 명령줄 인수를 프로그램 이름으로 해석하지만 옵션을 사용하면 -c명령줄에서 프로그램을 지정할 수 있습니다(즉, 기본값은 와 반대입니다 awk).

그것과 별개로 파이프를 사용한 통신이 있습니다. 이는 쉘 구문과 OS에 의해 처리되며 스크립트에서 수행해야 할 유일한 작업은 stdout, 담당자에 쓰는 것입니다. stdin에서 읽습니다. 그렇습니다. awk프로그램은 파이프를 통해 통신할 수 있습니다.

답변2

엄밀히 말하면 전화할 때, 당신은 언어가 아닌 통역사를 참조합니다. 언어라고 합니다AWK.

awk(또는 mawk, )은 프로그래밍 언어 nawk로 작성된 프로그램을 실행하는 유일한 유틸리티입니다 .AWK

POSIX가 정의한 대로,awk 프로그램이다:

프로그램

-f 옵션이 지정되지 않으면 awk의 첫 번째 피연산자는 awk 프로그램의 텍스트가 됩니다. 애플리케이션은 프로그램 피연산자를 awk에 대한 단일 인수로 제공해야 합니다. 텍스트가 a로 끝나지 않으면 awk는 텍스트를 마치 끝난 것처럼 해석합니다.

따라서 옵션을 사용하지 않으면 -f예제 중 두 개를 awk 프로그램으로 간주할 수 있습니다.

관련 정보