免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yinyuemi
打印 上一主题 下一主题

[学习共享] awk数组的学习心得 [复制链接]

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
21 [报告]
发表于 2011-05-04 10:04 |只看该作者
回复 19# 南极雨


第二个例子是计算总数(sum)
你把+=改成=,还能实现这个功能么?

论坛徽章:
0
22 [报告]
发表于 2011-05-04 11:01 |只看该作者
回复 21# Shell_HAT

为什么name[42]的值会是42呢?

在文件中:
# [root@localhost awk]# cat file
# 1214 42  5 34  543 54
# 2323 434 43 34 434 44
# 122  32
# 1213 324 4345 456 56 77
# 1233 q3 we23 <F2>2342 2342
# 213 213 546 798 987 654
#
END 语句中i的值会遍历所有数组下表,当i=42时,name[42]=42
[root@danoolive ~]# awk  '{name[$2]=$2;print  name["42"]}' file
42
42
42
42
42
42

我写的有点太绝对了,没有说前提条件,误会误会了...不好意思!

+=计算总数(sum)
这个是不是应该放在END 里面呢?

论坛徽章:
0
23 [报告]
发表于 2011-05-04 11:02 |只看该作者
回复 21# Shell_HAT


   
为什么name[42]的值会是42呢?

在文件中:
# [root@localhost awk]# cat file
# 1214 42  5 34  543 54
# 2323 434 43 34 434 44
# 122  32
# 1213 324 4345 456 56 77
# 1233 q3 we23 <F2>2342 2342
# 213 213 546 798 987 654
#
END 语句中i的值会遍历所有数组下表,当i=42时,name[42]=42
[root@danoolive ~]# awk  '{name[$2]=$2;print  name["42"]}' file
42
42
42
42
42
42

我写的有点太绝对了,没有说前提条件,误会误会了...不好意思!

+=计算总数(sum)
这个是不是应该放在END 里面呢?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
24 [报告]
发表于 2011-05-04 11:46 |只看该作者
回复 19# 南极雨


    不好意思,应该是我举的例子不好,如果整个文本的没有重复的话,就是你说的a[$0]+=$1 和a[$0]=$1是一样的,如果有重复的话就不一样了,举个例子吧,

  1. echo "1 a
  2. 1 b
  3. 2 a
  4. 2 b" |awk '{print "a[$0]+ = ",a[$0]+=$1, "a[$0] = ", a[$0]=$1}'
  5. a[$0]+ =  1 a[$0] =  1
  6. a[$0]+ =  1 a[$0] =  1
  7. a[$0]+ =  2 a[$0] =  2
  8. a[$0]+ =  2 a[$0] =  2

  9. echo "1 a
  10. 1 a
  11. 2 a
  12. 2 a" |awk '{print "a[$0]+ = ",a[$0]+=$1, "a[$0] = ", a[$0]=$1}'
  13. a[$0]+ =  1 a[$0] =  1
  14. a[$0]+ =  2 a[$0] =  1
  15. a[$0]+ =  2 a[$0] =  2
  16. a[$0]+ =  4 a[$0] =  2

复制代码

论坛徽章:
0
25 [报告]
发表于 2011-05-04 13:08 |只看该作者
回复 24# yinyuemi


是我不好意思,我又钻牛角尖里面了,这么简单的问题,稍微多想一点儿就知道了...

论坛徽章:
0
26 [报告]
发表于 2011-05-04 19:08 |只看该作者
提示: 该帖被管理员或版主屏蔽

论坛徽章:
1
水瓶座
日期:2013-11-04 13:16:13
27 [报告]
发表于 2011-05-05 10:19 |只看该作者
好贴,顶!

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
28 [报告]
发表于 2011-06-26 00:34 |只看该作者
第七题的例二中的:l=asorti(c) 你的解释是没有问题的,但是好像漏写点
你解释说:利用asorti函数对数组的下标进行排序,并获取数组长度,即输出文件的列数(NF值)
好像你没有把asorti的功能的另一个特点说出来,它与asort是不一样。asorti(a)了以后会用数字来作为indices,但是它会用原来的indices作为数组的值,除非你指定另一个参数如:asorti(a,b)。

感谢lionfun兄弟对asorti函数部分的指正和补充

论坛徽章:
0
29 [报告]
发表于 2011-06-26 21:15 |只看该作者
最近正在研究数组 先顶在看

论坛徽章:
0
30 [报告]
发表于 2011-07-29 10:38 |只看该作者
yinyuemi,你好:

请问awk里面一种求平均值的使用方式,a[$1]+=$2  看不懂,解释一下呗,谢~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP