免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
71 [报告]
发表于 2012-10-04 19:33 |只看该作者
要顶的啊,楼主辛苦了,谢谢

论坛徽章:
0
72 [报告]
发表于 2012-12-14 10:24 |只看该作者
加油啊!!!!顶哦!!!!!

论坛徽章:
0
73 [报告]
发表于 2012-12-14 18:58 |只看该作者
回复 1# yinyuemi


    UP

论坛徽章:
0
74 [报告]
发表于 2012-12-31 10:00 |只看该作者
我继续顶你!太好的帖子了 支持

论坛徽章:
0
75 [报告]
发表于 2012-12-31 11:41 |只看该作者
先回复,再细看,谢谢分享。

论坛徽章:
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
76 [报告]
发表于 2012-12-31 13:37 |只看该作者
最近也看到了数组其中有几点书中讲的不是很清楚,列入a=$1 在awk中数组的下表应该不能这么写把?这样写把他识别为一个字符,那么我文件里面全是数字。后面的值是这个值是下表去匹配的值么?比如a[$0]=$1 这个意思是 在整个文本中。只遍历$1这一列么?

看不懂你的问题。给点数据说明一下吧
@力哥丶

论坛徽章:
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
77 [报告]
发表于 2012-12-31 16:16 |只看该作者
好吧。我还没说清楚,是这样
文件:
a  b   c   d
e  v   n  m
数组 a 他的下标是3的时候,值为c
a=$4  他的标的值是1 值为d、下标为2 值为m?

可能你还是没有理解hash数组。它和普通的数组不同,下标(或者说key)不光可以是数字(1、2、3、4),还可以是字符串(a、b、c、d)。
awk里面经常看到a[$4]++之类的用法,作用是统计第四列每一个字符串出现的次数。执行过程类似于:
awk读到第一行的时候,$4=d,实际执行的是:a[d]++
awk读到第二行的时候,$4=m,实际执行的是:a[m]++
@力哥丶

论坛徽章:
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
78 [报告]
发表于 2012-12-31 18:16 |只看该作者
奥。也就是说
a=$4
其实就是
a[d]=$4
第二行是
a=$4
就是
a[m]=$4
。那么前面的还是存放在数组上,只不过统计第四列。

第一行:
a[$1]=a[a]
a[$2]=a
a[$3]=a[c]
a[$4]=a[d]

第二行:
a[$1]=a[e]
a[$2]=a[v]
a[$3]=a[n]
a[$4]=a[m]

@力哥丶

论坛徽章:
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
79 [报告]
发表于 2013-01-04 16:04 |只看该作者
我又来了,
文本:
A 1 2 3 4
B 1 2 3
C 1 2 3 4
awk '{for(i=2;i<=NF;i++)print $1,$i}
这里最后打印的$i 因为i=2,直接打印i的时候i是从2开始的。$i从1开始?但不明白原理。求指点。

你这个代码里面什么地方是直接打印i?
@力哥丶

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
80 [报告]
发表于 2013-01-04 16:22 |只看该作者
:wink:果断转成PDF收藏
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP