스크립팅 프로그래밍 언어인 것은 알지만 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}'
에서 가져옴여기.
문제는 다음과 같습니다
- awk는 언제 명령으로 해석되어야 합니까?
- awk는 언제 프로그램인가요?
- 첫 번째 예제를 명령으로 호출하는 데 문제가 있습니까
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 프로그램으로 처리할 수 있습니다.