AWK文本分析

一:AWK内置变量

  • $0:表示整个当前行
  • $1:每行第一个字段
  • $2:每行第二个字段
  • NR:每行的记录号
  • NF:字段数量变量
  • FILENAME:文件名

二:AWK常用命令展示

练习文件:passwd文件(/etc/passwd)如下:
passwd文件

【练习1:打印出第一列的内容即账户名称】

awk -F':' '{ print $1 }' passwd

在这里插入图片描述
解释:-F后面跟分隔符 冒号:,因为awk默认的分隔符是空格或tab制表符。
print打印函数,$1第一列。

【拓展:用cut方式】

cut -d ':' -f1 passwd

在这里插入图片描述

【练习2:只是显示passwd的账户和账户名称对应的shell,而账户与shell之间用制表符分割,而且在所有行开始前添加列名name,shell,在最后一行添加“blue,/bin/nosh"】

awk -F':' 'BEGIN{ print "name\tshell" }{print $1 "\t" $7}END{print "blue\t/bin/nosh"}' passwd

在这里插入图片描述

【练习3:在passwd文件中搜索有关键字root的所有行】

awk '/root/ {print $0}' passwd

在这里插入图片描述
解释:$0代表所有行

【练习4:统计passwd文件中,每行的行号,每行的列数,对应的完整行内容】

awk -F':' '{print NR "\t" NF "\t" $0}' passwd 

在这里插入图片描述
解释:行号是NR,列数是NF。

如果不指定分隔符(默认分隔符为空格),列数会发生变化:
在这里插入图片描述

练习文件awk.txt如下:
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

在这里插入图片描述

【练习5:合计每人1月工资,0:manager,1:worker】

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

在这里插入图片描述

【拓展:用awk脚本方式 awk.sh】

{
        split($3,date,"-");              ##分割月份,并存入数据
        if(date[2]=="01")                
                {name[$1]+=$5};
        if($2=="0")
                {role[$1]="manager"}
        else
                {role[$1]="worker"}
}
END{
        for(i in name)
                {
                print i "\t" role[i] "\t" name[i]}
                }

执行脚本如下:

awk -f awk.sh awk.txt     ###要用小写f

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值