前言

AWK是一门解释型的编程语言。用于文本处理,它的名字来源于它的三位作者的姓氏:Alfred Aho, Peter Weinberger 和 Brian Kernighan

  • awk 程序结构
  • 运行awk文件脚本
  • awk基础语法
  • awk 程序常用的内建变量

关注公众号,一起交流,微信搜一搜: 潜行前行

程序结构

awk命令模式:

  • awk ' BEGIN {awk-commands} /pattern/ {awk-commands} END {awk-commands}' fileName
  • 若存在匹配模式pattern,则需要用 / 包含
  • awk-commands 程序代码块必须被大括号
  • BEGIN语句块BEGIN {awk-commands}可选,它只执行一次,在这里可以初始化变量。BEGIN是AWK的关键字,必须为大写
  • BODY 语句块 /pattern/ {awk-commands},BODY语句块中的命令会对输入的每一行执行,可以通过提供模式来控制这种行为
  • END 语句块 END {awk-commands}可选,END语句块在程序的最后执行,END是AWK的关键字,必须为大写

awk工作流程

BODY语句块执行解析

脚本命令: awk '{ [代码语句1][代码语句2] }如果没有 fileName 或其他输入流,且存在BODY语句块,BODY语句块会进入死循环;代码语句表达式以分号结束,也可以用换行符结束

  • 1: 读入一行数据,并这一行的数据填入 $0;每一列的数据分别填入 $1, $2… 等变量当中
  • 2: 执行 代码语句
  • 3: 若还有后续的行数据,则重复上面 1~2 的步骤,直到每一数据都读完为止

运行awk文件脚本

  • awk文件脚本以awk后缀结尾
  • 选项 [-f]:awk -f command.awk marks.txt

awk基础语法

  • awk变量不需要提前定义,也不许要指定类型
awk 'BEGIN{sum=1;print sum}'
1
  • 流程控制
#-------- 伪代码 1  ---------
if ({condition})代码逻辑...
else if({condition})代码逻辑...
else代码逻辑...
#-------- 伪代码 2  ---------
for ({初始化}; {condition};{后续逻辑}){代码逻辑...
}
#-------- 伪代码 3  ---------
while ({condition}){代码逻辑...
}
#-------- 伪代码 4  ---------
do{代码逻辑...
}while ({condition})
  • 运算符,基本和 java 编程语言一样 下面简单列举几个运算符
符号 说明 示例
^ 指数操作符 a = a ^ 2
-/+ 一元操作符 a = -10; a = +a;
condition ? action : action 三元操作符 (a > b) ? max = a : max = b;
&& / || 逻辑操作符 if (num >= 0 && num <= 7)
== / != 等于不等于 if (a == b)
awk 'BEGIN{sum=1;sum++; if(sum==2) print sum}'
2
  • 数组,AWK支持关联数组,也就是说,不仅可以使用数字索引的数组,还可以使用字符串作为索引;删除数组元素使用delete语句delete arr[0]
$ awk 'BEGIN {arr["lwl"] = 1; arr["csc"] = 2; for (i in arr) printf "arr[%s] = %d\n", i, arr[i]}'
arr[lwl] = 1
arr[csc] = 2
  • 字符串操作
---- 空格拼接字符,则默认使用逗哈作为拼接符 ----
awk 'BEGIN { str1 = "csc, "; str2 = "lwl"; str3 = str1 str2; print str3 }'
csc, lwl
  • 字符串相关的内建函数
index(str, sub) #获取sub在str起始索引
length(str) #获取str长度
match(str, regex) #str是否匹配regex模式
split(str, arr, regex)
sub(regex, sub, string)
substr(str, start, l)
tolower(str)
toupper(str)

正则表达式

  • 匹配符:~ 和 !~ 分别代表匹配和不匹配
$ awk '$0 !~ 9' marks.txt
1) Amit     Physics   80
3) Shyam    Biology   87
  • 匹配符和正则表达式
# log.txt内容文件
1 csc world
2 lwl hello
----------输出第二列包含lwl的行------------------------------
$ awk '$2 ~ /lwl/ {print $2,$3}' log.txt
lwl hello
------输出包含csc的行---------------------------
$ awk '/csc/ {print $0}' log.txt
1 csc world

awk 程序常用的内建变量

变量 描述
$n 当前记录的第n个字段,字段间由FS分隔
$0 完整的输入记录
ARGC 命令行参数的数目
ARGV 包含命令行参数的数组
ENVIRON 环境变量
ERRNO 最后一个系统错误的描述
FILENAME 当前文件名
FS 字段分隔符(默认是任何空格)
IGNORECASE 进行忽略大小写的匹配
NF 一条记录的字段的数目
NR 已经读出的记录数,就是行号,从1开始
FNR 和NR类似,不过如果存在多个输入文件,FNR当前文件的行号
OFS 输出 字段分隔符
ORS 输出 行分隔符
RLENGTH 由match函数所匹配的字符串的长度
RS 记录分隔符(默认是一个换行符)
RSTART 由match函数所匹配的字符串的第一个位置
ARGIND 循环处理数据时,当前被处理的ARGV的索引
PROCINFO 包含进程信息的关联数组,例如UID,进程ID等
  • ARGV 命令行参数个数
$ awk 'BEGIN { for (i = 0; i < ARGC - 1; ++i) { printf "ARGV[%d] = %s\n", i, ARGV[i] }
}' csc lwl
ARGV[0] = csc
ARGV[1] = lwl
  • ENVIRON 环境变量
$ awk 'BEGIN { print ENVIRON["USER"] }'
csc
  • FILENAME 当前文件名
$ awk 'END {print FILENAME}' test.txt
test.txt
  • RSTART,由match函数所匹配的字符串的第一个位置
$ awk 'BEGIN { if (match("One Two Three", "Thre")) { print RSTART } }
9

欢迎指正文中错误

参考文章

  • Linux awk 命令
  • 三十分钟学会AWK

技能篇:awk教程-linux命令相关推荐

  1. linux命令基本格式教程,Linux命令基本格式(详解版)

    本节开始,我们不会再见到图形界面了,因为对服务器来讲,图形界面会占用更多的系统资源,而且会安装更多的服务.开放更多的端口,这对服务器的稳定性和安全性都有负面影响.其实,服务器是一个连显示器都没有的家伙 ...

  2. linux awk 教程,linux awk使用

    一.编写脚本,实现开启或禁用SELinux功能. #!/bin/bash disable_selinux(){ sed -i.bak 's/SELINUX=enforcing/SELINUX=disa ...

  3. linux awk 教程,Linux awk使用案例教程

    awk脚本 awk脚本通常由以下3部分构成: BEGIN{ 这里面放的是执行前的语句 } END {这里面放的是处理完所有的行后要执行的语句 } {这里面放的是处理每一行时要执行的语句} 假如有以下表 ...

  4. (技能篇)Mysql在linux下的全量热备份

    相关命令: #创建备份目录 mkdir -p /mysqlbackup #进入创建的备份目录中 cd /mysqlbackup #如果mysql运行在mysql用户和用户组下面,root表示用户,my ...

  5. 技能篇:开发必备linux命令大全-稳赚不亏

    我们的服务一般都是在linux系统运行,因此了解一些关于linux命令是必须.接下来将一一详细介绍一些常用的linux的命令 文件操作 远程登录与操作 磁盘挂载 进程管理 启动和结束 系统性能参数查看 ...

  6. 技能篇:开发必备linux命令大全

    我们的服务一般都是在linux系统运行,因此了解一些关于linux命令是必须.接下来将一一详细介绍一些常用的linux的命令 文件操作 远程登录与操作 磁盘挂载 进程管理 启动和结束 系统性能参数查看 ...

  7. 开发必备linux命令大全-稳赚不亏

    我们的服务一般都是在linux系统运行,因此了解一些关于linux命令是必须.接下来将一一详细介绍一些常用的linux的命令 文件操作 远程登录与操作 磁盘挂载 进程管理 启动和结束 系统性能参数查看 ...

  8. Linux命令入门教程(一):命令简介与初识

    本文档将对Linux的基础知识.常用的操作命令进行介绍,希望能帮忙你入门Linux. 推荐以下教程参考: Linux教程:Linux 教程 | 菜鸟教程 Linux命令大全:Linux 命令大全 | ...

  9. centos 计算器_在Linux命令行中使用计算器的5个命令详解

    大家好,我是良许. 在使用 Linux 时,我们有时会需要做一些计算,那么我们就可能需要用到计算器.在 Linux 命令行里,有许多计算器工具,这些命令行计算器可以让我们执行科学计算.财务计算或者一些 ...

最新文章

  1. 缓存穿透、并发和雪崩那些事
  2. linux c之通过管道父子进程实现同步通信
  3. python cmd闪退_使用cmd python模块时,如何使程序正常崩溃?
  4. 上传图片或文件 方法一
  5. 暖通专业标准规范大全_完美!暖通空调专业工程量计算知识大全
  6. 原创第13篇~while循环
  7. 没有可用软件包 docker-compose。_XSS可用空间只有364G!是XSS游戏更小《盗贼之海》小一大半...
  8. 电脑护眼模式_2020年双11护眼仪/眼部按摩仪推荐 |护眼仪/眼部按摩仪选购指南 |高性价比护眼仪推荐...
  9. 【Java每日一题】20161019
  10. 银行测试汉字录入软件,小键盘数字练习软件(银行及各行业文员专用)
  11. 动易模板制作示例(二)
  12. 洛达检测软件AB1562UT_1.4.4新版本下载,适用洛达全系列
  13. 基于VM10+Win7安装Mac OSX10.11 El Capitan
  14. 威纶通与三菱PLC条码枪解码程序 本程序是威纶通触摸屏USB接头直接插条形码扫码枪
  15. mysql 储存特殊符号表情报错
  16. UUCTF(公共赛道)
  17. linux 查找后删除目录,linux中find与rm实现查找并删除目录或文件
  18. 关于element-ui中轮播图手动切换轮播图片
  19. 读书百客:《宿新市徐公店》评赏
  20. php生成字母头像,Identicon:实现根据用户账号生成像素头像 php 版

热门文章

  1. 区块链的前世今生:为什么说区块链是即将到来的数字革命?
  2. 用计算机模拟地球诞生,计算机模拟显示:地球生命或源自太空外星微生物
  3. 九龙证券|磷酸铁锂电池包和铅酸电池有哪些区别?
  4. 什么是DTO、VO、BO、PO、DO、POJO
  5. 大学三年积累的教学资源分享和推荐!
  6. IDEA 公司推出新字体,极度舒适~
  7. 【win10 VS2019 opencv4.6 配置参考】
  8. linux终端有颜色字体
  9. QQ在线状态-可以与我直接QQ交流
  10. 【计算机网络期末复习】