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).

이와 관련되지 않은 것은 파이프를 사용한 통신입니다. 이는 쉘 구문과 운영 체제에 의해 처리되며 스크립트가 수행해야 하는 유일한 작업은 를 나타내는 표준 출력에 쓰는 것입니다. 표준 입력에서 읽습니다. 그렇습니다. awk프로그램은 파이프를 통해 통신할 수 있습니다.

답변2

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

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

POSIX에서 정의한 대로,awk 프로그램예:

프로그램

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

따라서 옵션을 사용하지 않으면 -f두 예제 모두 awk 프로그램으로 처리할 수 있습니다.

관련 정보