Linux强大的文本分析工具awk详解

1、awk简介

awk是一个强大的文本分析工具,也可以说是Linux下一门字符串处理语言,它的数据可以来自标准输入(stdin)、一个文件或多个文件、或其他命令的输出。它可以作为命令使用,但更多的是作为脚本使用。

它支持正则表达式、支持自定义变量(类map型数组,只不过索引可以是字符串)、支持内置变量、内置函数、及流程控制语句。

它会依次读取文件的每一行内容, 然后对其进行处理。空格符和制表符为其默认的分割符,使用分割符号对每行进行切片,然后对切开部分进行单独的处理。

2、awk参数

支持自定义分隔符

支持正则表达式匹配 (标准正则)

支持自定义变量,数组 a[1] a[tom] map(key)

支持内置变量

                   ARGC               命令行参数个数

                   ARGV               命令行参数排列

                   ENVIRON            支持队列中系统环境变量的使用

                   FILENAME           awk浏览的文件名

                   FNR                浏览文件的记录数

                   FS                 设置输入域分隔符,等价于命令行 -F选项

                   NF                 浏览记录的域的个数  本行总列数

                   NR                 已读的记录数    行号

                   OFS                输出域分隔符

                   ORS                输出记录分隔符

                   RS                 控制记录分隔符

控制记录分隔符 支持函数 print、split、substr、sub、gsub

支持流程控制语句,类C语言 if、while、do/while、for、break、continue

\$0 代表整个记录,\$1表示第一个字段,$2表示第二个字段,一次类推。。。。

3、示例

文本数据

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
mysqladmin:x:514:101::/usr/local/mysql:/bin/bash

需求

按:切割a.txt文件,打印第一列

awk -F':' '{print $1}' a.txt

按:切割a.txt文件,打印第一列和第七列,tab键分隔

awk -F':' '{print $1 "\t" $7}' a.txt

按:切割a.txt文件,打印第一列和第七列,表头追加name和shell,表尾追加over,字段间tab键分隔

awk -F':' 'BEGIN{print "name\tshell"} {print $1 "\t" $7} END{print "over"}' a.txt

打印含root单词的行

awk '/root/ {print $0} ' a.txt

打印含root单词的行后,再打印所有行(搜索值作用于第一个函数)

awk '/root/ {print $0}  {print $0} ' a.txt

打印文件每行的信息,最前方追加行号和该行总列数,用tab键分隔

awk -F':' '{print NR "\t" NF "\t" $0}' a.txt

报表统计数据

# 统计报表:合计每人1月工资,0:manager,1:worker
Tom      0   2012-12-11      car     3000
John     1   2013-01-13      bike    1000
vivi     1   2013-01-18      car     2800
Tom      0   2013-01-20      car     2500
John     1   2013-01-28      bike    3500

需求

统计01月员工工资

awk '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5}} END{for(i in name){print i "\t" name[i]}}' a.txt

统计01月员工工资,员工类型为0,末尾追加M,为1末尾追加W

awk '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5};if($2=="0"){role[$1]="M"}else{role[$1]="W"}} END{for(i in name){print i "\t" name[i] "\t" role[i]}}' a.txt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值