Interaction with Other Programs
仅适用于Unix版本的系统,其他非Unix版本的系统结果可能不同
The system Function
system(expression)
system的返回值就是expression执行之后的返回值。
可以通过system执行系统指令。
之前的include文档就可以这样实现:
# include - replace #include "f" by contents of file f
/^#include/ {
gsub(/"/, "", $2)
while (getline x <$2 > 0)
print x
next
}
{ print }
$1 =="#include" { gsub(/"/, "", $2); system("cat" $2); next}
{ print }
Making a Shell Command from an AWK Program
awk可以通过-f执行指定的文件,也可以直接在命令行执行。
因为awk和shell中很多符号都是一样的执行方式,比如$和”“,所以常常用单引号包裹命令使得这些符号保留原有的作用
linux bash shell中,单引号、 双引号,反引号(“)的区别及各种括号的区别
所以可以用awk命令编辑成脚本文件进行使用,书中给出了例子:
Eg.按照制定的顺序打印指定的字段
# field - print named fields of each input line
# usage: field n n n … file file file
awk '
BEGIN {
for (i = 1; ARGV[i] ~ /^[0-9]+$/; i++) { # collect numbers
fld[++nf] = ARGV[i]
ARGV[i] = ""
}
if (i >= ARGC) # no file names so force stdin
ARGV[ARGC++] = "-"
}
{ for (i = 1; i <= nf; i++)
printf("s%s", $fld[i], i < nf? " " : "\n")
}
' $*
awk三种变量附值形式:
1:-v var=text
特点,一次一附值一次,作用在BEGIN模块之前,命令行位置必需要文件类参数之前,可以更改内置变量,不收录ARGV
常用于传shell变量给awk
2:BEGIN模块
特点:awk程序体进行的变量附值 ,其中BEGIN模块的执行在读输入之前,可以更改内置变量
典型的用法是在没输入的时候运行一段awk程序就写在begin里
3:无-v的var=text形式
特点:可以更改内置变量,类同文件类参数,收录进ARGV,放在文件类参数前,在文件类参数对应文件开始读入前起作用