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,放在文件类参数前,在文件类参数对应文件开始读入前起作用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值