技能篇:awk教程-linux命令
前言
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命令相关推荐
- linux命令基本格式教程,Linux命令基本格式(详解版)
本节开始,我们不会再见到图形界面了,因为对服务器来讲,图形界面会占用更多的系统资源,而且会安装更多的服务.开放更多的端口,这对服务器的稳定性和安全性都有负面影响.其实,服务器是一个连显示器都没有的家伙 ...
- linux awk 教程,linux awk使用
一.编写脚本,实现开启或禁用SELinux功能. #!/bin/bash disable_selinux(){ sed -i.bak 's/SELINUX=enforcing/SELINUX=disa ...
- linux awk 教程,Linux awk使用案例教程
awk脚本 awk脚本通常由以下3部分构成: BEGIN{ 这里面放的是执行前的语句 } END {这里面放的是处理完所有的行后要执行的语句 } {这里面放的是处理每一行时要执行的语句} 假如有以下表 ...
- (技能篇)Mysql在linux下的全量热备份
相关命令: #创建备份目录 mkdir -p /mysqlbackup #进入创建的备份目录中 cd /mysqlbackup #如果mysql运行在mysql用户和用户组下面,root表示用户,my ...
- 技能篇:开发必备linux命令大全-稳赚不亏
我们的服务一般都是在linux系统运行,因此了解一些关于linux命令是必须.接下来将一一详细介绍一些常用的linux的命令 文件操作 远程登录与操作 磁盘挂载 进程管理 启动和结束 系统性能参数查看 ...
- 技能篇:开发必备linux命令大全
我们的服务一般都是在linux系统运行,因此了解一些关于linux命令是必须.接下来将一一详细介绍一些常用的linux的命令 文件操作 远程登录与操作 磁盘挂载 进程管理 启动和结束 系统性能参数查看 ...
- 开发必备linux命令大全-稳赚不亏
我们的服务一般都是在linux系统运行,因此了解一些关于linux命令是必须.接下来将一一详细介绍一些常用的linux的命令 文件操作 远程登录与操作 磁盘挂载 进程管理 启动和结束 系统性能参数查看 ...
- Linux命令入门教程(一):命令简介与初识
本文档将对Linux的基础知识.常用的操作命令进行介绍,希望能帮忙你入门Linux. 推荐以下教程参考: Linux教程:Linux 教程 | 菜鸟教程 Linux命令大全:Linux 命令大全 | ...
- centos 计算器_在Linux命令行中使用计算器的5个命令详解
大家好,我是良许. 在使用 Linux 时,我们有时会需要做一些计算,那么我们就可能需要用到计算器.在 Linux 命令行里,有许多计算器工具,这些命令行计算器可以让我们执行科学计算.财务计算或者一些 ...
最新文章
- 缓存穿透、并发和雪崩那些事
- linux c之通过管道父子进程实现同步通信
- python cmd闪退_使用cmd python模块时,如何使程序正常崩溃?
- 上传图片或文件 方法一
- 暖通专业标准规范大全_完美!暖通空调专业工程量计算知识大全
- 原创第13篇~while循环
- 没有可用软件包 docker-compose。_XSS可用空间只有364G!是XSS游戏更小《盗贼之海》小一大半...
- 电脑护眼模式_2020年双11护眼仪/眼部按摩仪推荐 |护眼仪/眼部按摩仪选购指南 |高性价比护眼仪推荐...
- 【Java每日一题】20161019
- 银行测试汉字录入软件,小键盘数字练习软件(银行及各行业文员专用)
- 动易模板制作示例(二)
- 洛达检测软件AB1562UT_1.4.4新版本下载,适用洛达全系列
- 基于VM10+Win7安装Mac OSX10.11 El Capitan
- 威纶通与三菱PLC条码枪解码程序 本程序是威纶通触摸屏USB接头直接插条形码扫码枪
- mysql 储存特殊符号表情报错
- UUCTF(公共赛道)
- linux 查找后删除目录,linux中find与rm实现查找并删除目录或文件
- 关于element-ui中轮播图手动切换轮播图片
- 读书百客:《宿新市徐公店》评赏
- php生成字母头像,Identicon:实现根据用户账号生成像素头像 php 版