什么时候将 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)。

与此无关的是使用管道的通信。这是由 shell 语法和操作系统处理的,您的脚本唯一需要做的就是写入标准输出,代表。从标准输入读取。所以是的,awk程序可以通过管道进行通信。

答案2

严格来说,当你打电话时awk,你指的是口译员,而不是语言。该语言称为AWK

awk(或mawk, nawk) 只是实用程序,它将执行用AWK编程语言编写的程序。

正如 POSIX 所定义的,awk程序是:

程序

如果未指定 -f 选项,则 awk 的第一个操作数应为 awk 程序的文本。应用程序应将程序操作数作为单个参数提供给 awk。如果文本不以 a 结尾,awk 将解释该文本,就像它以 a 结尾一样。

因此,如果您不使用-f选项,您可以将两个示例视为 awk 程序。

相关内容