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
原文地址:
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
相关文章推荐
- awk数组里面的$0问题及想到的(baidu上面看到的)
- awk数组里面的$0问题及想到的
- 小数学解决大问题 - 切饼问题(由数组想到)
- 深入 JAVA里面关于byte数组和String之间的转换问题
- 关于中断里面开数组的问题
- JAVA里面关于byte数组和String之间的转换问题
- awk里面的数组很好用
- 作为函数参数的多维数组想到的两个问题
- JavaScript 里面数组下标可以是负值问题
- [原]深入 JAVA里面关于byte数组和String之间的转换问题
- 问题描述如下: 有2.5亿个整数(这2.5亿个整数存储在一个数组里面,至于数组是放在外存还是内存,没有进一步具体说明); 要求找出这2.5亿个数字里面,不重复的数字的个数; 另外,可用的内存限定为600M; 要求算法尽量高效,最优;
- 如何在linux Shell脚本里面把一个数组传递到awk内部进行处理
- JAVA里面关于byte数组和String之间的转换问题
- js里面关于数字 字符串 数组 的问题
- 关于结构体里面的字符串指针输出出现乱码的问题与结构体数组作为参数传值的问题
- [睡前灵感and发散思维]由一个简单的数组比较问题而想到的
- 由数组初始化想到的线程堆栈问题。
- JAVA里面关于byte数组和String之间的转换问题
- 关于Flex里面的对象或者ArrayCollection等数组的深度复制问题
- 找出数组里面元素出现次数最多的问题