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,放在文件類參數前,在文件類參數對應文件開始讀入前起作用