您的位置:首页 > 其它

awk数组里面的$0问题及想到的

2014-08-18 00:00 113 查看
觉得这个文章不错,就先记下来了!

原文地址:
http://zhidao.baidu.com/question/379044580.html

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  文章 记录