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