Chinaunix首页 | 论坛 | 博客
  • 博客访问: 47750
  • 博文数量: 17
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 145
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-31 09:37
文章分类

全部博文(17)

文章存档

2016年(3)

2015年(14)

我的朋友

分类: LINUX

2015-11-20 17:15:10

awk BEGIN{动作};模式{动作};模式{动作}。。。;END{动作} file


pattern缺省为1,action缺省为print
那么 awk ‘1’完整的写法就是 awk ‘1{print}’; 同理, awk ‘{print}’完整的写法也是 awk ‘1{print}’。



1.取出password中shell出现的次数
awk -F : '{a[$7]++}END{for(i in a){print i,a[i]}}' /etc/passwd
2.文件整理
employee文件中记录了工号和姓名
employee.txt:
100 Jason Smith 
200 John Doe 
300 Sanjay Gupta 
400 Ashok Sharma 
bonus文件中记录工号和工资
bonus.txt:
100 $5,000 
200 $500 
300 $3,000 
400 $1,250 
要求把两个文件合并并输出如下
awk 'NR==FNR{a[$1]=$2}NR>FNR{print $1,$2,a[$1]}' bonus.txt employee.txt 

100 Jason $5,000
200 John $500
300 Sanjay $3,000
400 Ashok $1,250
How works:
FNR file line number 包含了一个文件的当前的行号,多个文件会重新编号


NR:文件总行号,区别是多个文件编号时不会重新编号

awk 'NR==FNR ....NR>FNR ...' bonus.txt employee.txt :
读入bonus.txt时,已读入bonus.txt的记录数FNR一定等于awk已经读入的总记录数NR,因为bonus.txt是awk读入的首个文件,故执行前一个命令块{a[$1]=$2}, a[100]=$5000,
读入employe.txt时,NR一定大于FNR,处理{print $1,$2,a[$1]}


现有文本文件日志:
游戏id   在线时常time   QQ号码
6534    456           37354893
6500    056           564572105
6534    4156         37354893
6500    2456         564572100
……… ………
要求,写shell脚本对改文件按照第二列在线时常排序,然后,统计每个QQ号总共时长和。
cat test.txt | sort -k1 | awk '{qq[$3]+=$2}END{for(i in qq) print "qq:"i, qq[i]}'

[root@localhost ~]# cat test
zhangsan     80
lisi                 81.5
wangwu       93
zhangsan     85
lisi                88
wangwu      97
zhangsan    90
lisi               92
wangwu      88
[root@localhost ~]# 

要求输出格式:(average:平均成绩,total:总成绩)
name#######average#######total
zhangsan            xxx                        xxx
lisi                       xxx                        xxx
wangwu             xxx                        xxx

awk '{name[$1]++;total[$1]+=$2}END{for(i in total){print total[i],name[i],i};}' test.txt

name["zhangsan"]=0,   for i in name:    print i就是现在方括号里面的值:zhangsan , name[i]=name["zhangsan"]=0
total["zhangsan"]+=12





阅读(1119) | 评论(0) | 转发(0) |
0

上一篇:shell重定向

下一篇:shell 习题

给主人留下些什么吧!~~