AWK文本处理工具

一、Awk 基础语法:
Awk –Fs ‘/pattern/ {action}’ input-file
(或者)
Awk –Fs ‘{action}’ input-file
上面语法中:
-F 为字段分界符。如果不指定,默认会使用空格作为分界符。
 /pattern/和{action}需要用单引号引起来。
 /pattern/是可选的。如果不指定,awk 将处理输入文件中的所有记录。如果指定一个模式,awk 则只处理匹配指定的模式的记录。
 {action} 为 awk 命令,可以是单个命令,也可以多个命令。整个 action(包括里面的所有命令)都必须放在{ 和 }之间。
 Input-file 即为要处理的文件

典型的 awk 程序包含下面三个区域:

  1. BEGIN 区域
    Begin 区域的语法:
    BEGIN { awk-commands }
    BEGIN 区域的命令只最开始、在 awk 执行 body 区域命令之前执行一次。
     BEGIN 区域很适合用来打印报文头部信息,以及用来初始化变量。
     BEGIN 区域可以有一个或多个 awk 命令
     关键字 BEGIN 必须要用大写
     BEGIN 区域是可选的
  2. body 区域
    body 区域的语法:
    /pattern/ {action}
    body 区域的命令每次从输入文件读取一行就会执行一次
     如果输入文件有 10 行,那 body 区域的命令就会执行 10 次(每行执行一次)
     Body 区域没有用任何关键字表示,只有用正则模式和命令。
  3. END block
    END 区域的语法:
    END { awk-commands }
    END 区域在 awk 执行完所有操作后执行,并且只执行一次。
     END 区域很适合打印报文结尾信息,以及做一些清理动作
     END 区域可以有一个或多个 awk 命令
     关键字 END 必须要用大写
     END 区域是可选的**

    在这里插入图片描述
    多个输入文件时如果指定了两个文件,那么 body 区域会首先在第一个文件的所有行上执行,然后在第二个文件的所有行上执行。
    在这里插入图片描述
    例:显示文件内容,给每一列添加标题
    vi student
    在这里插入图片描述
    在这里插入图片描述
    二、常用命令
    在这里插入图片描述
    1.-v 变量赋值选项
    该选项将一个值赋予一个变量,它会在程序开始之前进行赋值
    在这里插入图片描述
    三、内置变量
    在这里插入图片描述
    1.打印命令
    默认情况下,awk 的打印命令 print(不带任何参数)会打印整行数据。与$0有相同作用 ($0代表整条记录)
    awk -F: ‘{print}’ /etc/passwd
    在这里插入图片描述
    awk -F:’{print $0}’ /etc/passwd
    在这里插入图片描述
    打印所有的行
    在这里插入图片描述
    在这里插入图片描述
    这两者结果相同
    2.FS输入字段分隔符
    -F: 与 FS=":’ 有相同作用
    在这里插入图片描述
    awk ‘BEGIN{FS=":"} {print $2,$3}’ /etc/passwd
    在这里插入图片描述
  4. NR – 记录序号
    NR 非常有用,在循环内部标识记录序号。用于 END 区域时,代表输入文件的总记录数。
    awk ‘END{ print NR }’ filename
    在这里插入图片描述
    #统计文件中的行数:只用了END语句块,在读入每一行的时,awk会将NR更新为对应的行号,当到达最后一行NR的值就是最后一行的行号,所以END语句块中的NR就是文件的行数

4 .NF 表示字段数,在执行过程中对应于当前的字段数。
例:查看/etc/passwd中当前字段数在这里插入图片描述
awk ‘{ print $NF }’ /etc/passwd#打印出一行中的最后一个字段;
在这里插入图片描述
awk ‘{ print $(NF-1)}’ /etc/passwd#打印出一行中的最后第二个字段;
在这里插入图片描述
5.外部变量参数传递
在这里插入图片描述

6.awk运算与判断
在这里插入图片描述
1)算术运算符
在这里插入图片描述
2)自增自减运算符
在这里插入图片描述
3)关系运算符
在这里插入图片描述
4)赋值运算符
在这里插入图片描述
7.正则运算符
#~ ~! 匹配正则表达式和不匹配正则表达式
awk ‘BEGIN {a=“100testa”; if(a ~ /^100*/) {print “ok”;}}’
在这里插入图片描述
8.比较运算符
在这里插入图片描述
9.#a>b?y:n 三目运算条件表达式
awk ‘BEGIN{a=“b”;print a==“b”?“ok”:“err”;}’
在这里插入图片描述
10.in 数组中是否存在某键值
awk ‘BEGIN{a=“b”;arr[0]=“b”;arr[1]=“c”;print (a in arr);}’
在这里插入图片描述
awk ‘BEGIN{a=“b”;arr[0]=“b”;arr[“b”]=“c”;print (a in arr);}’
在这里插入图片描述
11.高级输入输出
cat filename
aa 100
bb 353
cc 234
total 1000
awk ‘{if($1==“total”){next};print }’ filename #awk中next语句,相当于其他编程语言的continue
12.简单读取记录
awk ‘BEGIN{ “date” | getline out; print out }’ test
在这里插入图片描述
awk ‘BEGIN{ “date” | getline out; split(out,mon); print mon[2] }’ test
在这里插入图片描述
13.输出到一个文件 输出重定向
datefile文件中为空
echo | awk ‘{printf(“hello word!”) > “datafile”}’
在这里插入图片描述
echo | awk ‘{printf(“hello word!”) >> “datafile”}’
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值