awk

觉得这个文章不错,就先记下来了!
 
1、awk是按行处理文本数据的、
2、awk中的术语将一行为一个记录;一个记录还可以根据分隔符为多个字段、
3、$0标示整行内容(一个记录)
   
    a[$0]++ 用于分别统计不相同的记录个数,即,相同的$0内容,个数累加。
例子:1.txt  的测试数据
111 abc  def abc 
222 ddd  sss klm 
333 efg  xyz ddd 
abc ddd  sss klm
统计第二个字段域的名字和个数:?
  awk '{ w[$2]+=1 }END {for (a in w) print a,w[a]}' 1.txt
[root@lzt-Exam script]# awk '{ w[$2]+=1 } END { for (a in w) print a,w[a]}' 1.txt 
abc 1 
efg 1 
ddd 2
    分析:
    $2表示第二个字段,用w[abc]表示abc出现的次数,用w[ddd]表示ddd出现的次数,用w[efg]表示efg出现的次数。当$2=ddd的时候,累加w[ddd].这样,w就是一个包含所有$2的字段的集合,
最后通过for循环,把各自出现的次数打印出来!
 
附录以前碰到的题:顺便记录一下,便于翻看
有如下文件,请用awk命令计算出第二域含有bbb的个数 
[root@lnmp ~]# cat a.txt 
aaa     bbb     cccc    dddd 
bbb     ccc     dddd    eeee 
ccc     bbb     dddd    bbbb 
eee     fff     zzzz    ssss 
ggg     lll     bbbb    eeee 
======================================= 
测试数据: 
[root@oldboy ~]# cat a.txt 
aaa     bbb     cccc    dddd 
bbb     ccc     dddd    eeee 
ccc     bbb     dddd    bbbb 
eee     fff     zzzz    ssss 
ggg     lll     bbbb    eeee
王同学率先发出两个靠谱的答案: 
1) 
[root@oldboy ~]# awk '$2=="bbb" {i=i+1} END {print i}' a.txt 
2
2) 
[root@oldboy ~]# awk '{if($2=="bbb") i=i+1} END {print i}' a.txt 
2
张同学也发出来俩答案: 
3) 
[root@oldboy ~]# awk '{if($2=="bbb") ++oldboy[$2]} END {for (a in oldboy) print oldboy[a]}' a.txt 
2
4) 
[root@oldboy ~]# awk '{if($2=="bbb") ++oldboy[$2]} END {for (a in oldboy) print a,oldboy[a]}' a.txt 
bbb 2
5) 
某个11期的郑同学正在上课,趁着上课间隙也加入了10期群里的答题挑战。 
[root@oldboy ~]# awk '$2 == "bbb"' a.txt|wc -l 
2
6) 
[root@oldboy ~]# awk '{print $2}' a.txt  |awk '/bbb/' |wc -l 
2
7) 
一个山东大汉(也是老男孩的学生,呵呵),意外的发言发言了,答案同样令人震惊。 
[root@oldboy ~]# aa=(`cat a.txt |awk '{print $2}' |awk '/bbb/'`) 
[root@oldboy ~]# echo ${#aa[@]} 
2
8) 
庞风同学也给了自己的答案。 
[root@oldboy ~]# awk 'NF==4 && $2 ~ /bbb/ {print $2}' a.txt|sort|uniq -c 
2 bbb
本文出自 “ lzt417” 博客,请务必保留此出处 http://lzt417.blog.51cto.com/804811/911248
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值