나는 그것이 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
).
그것과 별개로 파이프를 사용한 통신이 있습니다. 이는 쉘 구문과 OS에 의해 처리되며 스크립트에서 수행해야 할 유일한 작업은 stdout, 담당자에 쓰는 것입니다. stdin에서 읽습니다. 그렇습니다. awk
프로그램은 파이프를 통해 통신할 수 있습니다.
답변2
엄밀히 말하면 전화할 때앗, 당신은 언어가 아닌 통역사를 참조합니다. 언어라고 합니다AWK.
awk
(또는 mawk
, )은 프로그래밍 언어 nawk
로 작성된 프로그램을 실행하는 유일한 유틸리티입니다 .AWK
POSIX가 정의한 대로,awk 프로그램이다:
프로그램
-f 옵션이 지정되지 않으면 awk의 첫 번째 피연산자는 awk 프로그램의 텍스트가 됩니다. 애플리케이션은 프로그램 피연산자를 awk에 대한 단일 인수로 제공해야 합니다. 텍스트가 a로 끝나지 않으면 awk는 텍스트를 마치 끝난 것처럼 해석합니다.
따라서 옵션을 사용하지 않으면 -f
예제 중 두 개를 awk 프로그램으로 간주할 수 있습니다.