Linux三剑客之awk详解

作者:网友投稿 时间:2019-06-27 16:51

字号

第一篇 awk简介与表达式实例 

一种名字怪异的语言

模式扫描和处理,处理数据和生成报告。

awk不仅仅是linux系统中的一个命令,而且是一种编程语言;它可以用来处理数据和生成报告(excel);处理的数据可以是一个或多个文件;可以是直接来自标准输入,也可以通过管道获取标准输入;awk可以在命令行上直接编辑命令进行操作,也可以编写成awk程序来进行更为复杂的运用。

sed处理stream editor文本流,水流。

一、awk环境简介

本文涉及的awk为gawk,即GNU版本的awk。

[root@creditease awk]# cat /etc/redhat-release 

CentOS Linux release 7.5.1804 (Core) 

[root@creditease awk]# uname -r 

3.10.0-862.el7.x86_64 

[root@creditease awk]# ll `which awk` 

lrwxrwxrwx. 1 root root 4 Nov  7 14:47 /usr/bin/awk -> gawk  

[root@creditease awk]# awk --version 

GNU Awk 4.0.2 

二、awk的格式

awk指令是由模式、动作,或者模式和动作的组合组成。

Linux三剑客之awk详解

Linux三剑客之awk详解

模式即pattern,可以类似理解成sed的模式匹配,可以由表达式组成,也可以是两个正斜杠之间的正则表达式。比如NR==1,这就是模式,可以把它理解为一个条件。

动作即action,是由在大括号里面的一条或多条语句组成,语句之间使用分号隔开。如下awk使用格式。

三、记录和域 名称 含义
record   记录,行  
filed   域,区域,字段,列  

1)NF(number of field)表示一行中的区域(列)数量,$NF取最后一个区域。

2)$符号表示取某个列(区域),$1,$2,$NF

3)NR (number of record) 行号,awk对每一行的记录号都有一个内置变量NR来保存,每处理完一条记录NR的值就会自动+1

4)FS(-F)field separator 列分隔符,以什么把行分隔成多列

3.1 指定分隔符

[root@creditease awk]# awk -F "#" '{print $NF}' awk.txt  

GKL$123 

GKL$213 

GKL$321 

[root@creditease awk]# awk -F '[#$]' '{print $NF}' awk.txt  

123 

213 

321 

3.2 条件动作基本的条件和动作

[root@creditease awk]# cat awk.txt  

ABC#DEF#GHI#GKL$123 

BAC#DEF#GHI#GKL$213 

CBA#DEF#GHI#GKL$321 

[root@creditease awk]# awk -F "#" 'NR==1{print $1}' awk.txt 

ABC 

3.3 只有条件

[root@creditease awk]# awk -F "#" 'NR==1' awk.txt 

BC#DEF#GHI#GKL$123 

默认会有动作{print $0}

3.4 只有动作

[root@creditease awk]# awk -F "#" '{print $1}' awk.txt 

ABC 

BAC 

CAB 

默认处理所有行

3.5 多个模式和动作
责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
关键词 >>Linux 性能 工具
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接