AWK學習筆記-2.6Interaction with Other Programs

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章