awk-数据处理工具

本文详细介绍了awk命令的使用方法,包括常见命令选项、模式操作、基本结构及内置变量,并通过实际案例展示了如何处理文本数据,适合初学者快速掌握awk的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、awk命令的使用

1.常用命令选项:
-F 指定输入分隔符,可以是字符串或正则表达式,如-F:
-v var=value 赋值一个用户定义变量,将外部变量传递给awk(每定义一个变量一个参数-v)
-f scriptfile 从脚本文件中读取awk命令
-v OFS=”\t” OFS变量表示输出分隔符(每定义一个变量一个参数-v)

2.模式和操作:
模式可以是以下任意一个:
awk脚本是由模式和操作来组成的

1.模式可以是以下任意一个
/正则表达式/: 使用通配符的扩展集,在”/” “/”这两根斜线之间的是正则表达式
关系表达式: 使用运算符进行操作,可以是字符串或数字的比较测试
模式匹配表达式: 用运算符 ~(匹配)和 ~!(不匹配)
BEGIN语句块、pattern语句块、END语句块

2.操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是 :
变量或数组赋值
输出命令
内置函数
控制流语句

3.基本结构:
awk ‘BEGIN{ print “start” } pattern{ commands } END{ print “end” }’ file
一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分 是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被单引号或双引号中。
awk ‘BEGIN{ print “start” } pattern{ commands } END{ print “end” }’ file

4.内置变量:
[A][N][P][G]表示第一个支持变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk
$n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。
$0 这个变量包含执行过程中当前行的文本内容。
argc:命令行参数的数目。
argind:命令行中当前文件的位置(从1开始算)。
argv:包含命令行参数的数组。
convfmt:数字转换格式(默认值为%.6g)。
environ:环境变量关联数组。
erron:后一个系统错误的描述。
fieldwidthos:字段宽度列表(用空格键分隔)。
filename:当前输入文件的名。
FBR:同NR,但相对于当前文件。
FS:字段分隔符(默认是任何空格)。
ignorecase:如果为真,则进行忽略大小写的匹配。
NF:表示字段数,在执行过程中对应于当前的字段数。
NR:表示记录数,在执行过程中对应于当前的行号。
ofmt:数字的输出格式(默认值是%.6g)。
OFS:输出字段分隔符(默认值是一个空格)。
ORS:输出记录分隔符(默认值是一个换行符)。
RS:记录分隔符(默认是一个换行符)。
rstart:由match函数所匹配的字符串的第一个位置。
rlength:由match函数所匹配的字符串的长度。

一、awk实际用例

[root@localhost ~]# cat text
#名称,电话,过去三个月捐款数
ke Harrington:[510] 548-1278 250:100 :175
Christian Dobbins:[408] 538-2358:155:90:201
Susan Dalsass:[206] 654-6279:250:60:50
Archie McNichol:[206] 548-1348:250:100 :175
Jody Savage:[206] 548-1278:15:188:150
Guy Quigley:[916] 343-6410:250:100 :175
Dan Savage:[406] 298-7744:450:300:275
Nancy McNeil:[206] 548-1278:250:80:75
John Goldenrod:[916] 348-4278:250:100 :175
Chet Main:[510] 548-5258:50:95:135

1.显示所有捐款人名称和第一个月捐款数
[root@localhost ~]# awk -F":" ‘{print $1,$3}’ text
ke Harrington 250
Christian Dobbins 155
Susan Dalsass 250
Archie McNichol 250
Jody Savage 15

2.显示Dan的电话号码
[root@localhost ~]# awk -F":" ‘/^Dan/{print $2}’ text
[406] 298-7744

3.显示Susan的名字和电话号码
[root@localhost ~]# awk -F: ‘/^Susan/{print $1 ,$2}’ text
Susan Dalsass [206] 654-6279

4.显示所有以D开头的姓(名在前,姓在后)
[root@localhost ~]# awk -F: ‘{print $1}’ text|awk ‘{print $2}’ | awk ‘/^D/’
Dobbins
Dalsass

5.显示所有以一个C或D开头的名
[root@localhost ~]# awk -F: ‘{print $1}’ text | awk ‘{print $1}’ | awk ‘/^ [ CD]/’
Christian
Dan
Chet

6.显示所有区号为916的人名
[root@localhost ~]# awk -F: ‘/916/{print $1}’ text
Guy Quigley
John Goldenrod

7.显示Ke的捐款.显示每个值时都有以$开头.如$250$100$175
[root@localhost ~]# awk -F: ‘/^ke/{print " $ “$3” $ “$4” $"$5}’ text
$250$100$175

8.显示姓,其后跟一个逗号和名
[root@localhost ~]# awk -F: ‘{print $1}’ text | awk ‘{print $2,",",$1}’
Harrington , ke
Dobbins , Christian
Dalsass , Susan
McNichol , Archie
Savage , Jody
Quigley , Guy
Savage , Dan

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值