觉得这个文章不错,就先记下来了!
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
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
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
[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
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
[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
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
[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
某个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
[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
一个山东大汉(也是老男孩的学生,呵呵),意外的发言发言了,答案同样令人震惊。
[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
庞风同学也给了自己的答案。
[root@oldboy ~]# awk 'NF==4 && $2 ~ /bbb/ {print $2}' a.txt|sort|uniq -c
2 bbb
本文出自 “
lzt417” 博客,请务必保留此出处
http://lzt417.blog.51cto.com/804811/911248