免费注册 查看新帖 |

Chinaunix

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

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

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


    你的问题就是答案
   第一个代码中{a[NR%3]=$0;}用来给数组赋值,
   第二个代码中{print a[NR%3]=$0;},除了赋值,还要打印

论坛徽章:
0
42 [报告]
发表于 2011-08-17 10:57 |只看该作者
本帖最后由 南极雨 于 2011-08-17 11:03 编辑

回复 1# yinyuemi


看了十几遍啊................................,终于看到一点可以补充的了, 呵呵:
awk 实际应用:
3-1
查看文件差异:

cat file1
aaa
bbb
ccc
ddd
cat file2
aaa
eee
ddd
fff

合并file1 file2 去除重复项:

如果file1内有重复项, 这个就不能合并了,例如:

cat file1
aaa
bbb
ccc
ddd
ddd


cat file2
aaa
eee
ddd
fff
  1. awk 'NR==FNR{a[$0]=1;print}NR>FNR{if(!(a[$0])) {print}}' file1 file2
  2. aaa
  3. bbb
  4. ccc
  5. ddd
  6. ddd
  7. eee
  8. fff
复制代码
改成:
  1. [root@localhost ~]# awk 'NR==FNR{if(!a[$0]++) print}NR>FNR{if(!(a[$0])) {print}}' a b
  2. aaa
  3. bbb
  4. ccc
  5. ddd
  6. eee
  7. fff
复制代码
file2 文件也一样....
[root@localhost ~]# cat file2
aaa
eee
ddd
fff
fff
  1. [root@localhost ~]# awk 'NR==FNR{if(!a[$0]++) print}NR>FNR{if(!(a[$0])) {print}}' file1 file2
  2. aaa
  3. bbb
  4. ccc
  5. ddd
  6. eee
  7. fff
  8. fff
复制代码
  1. [root@localhost ~]# awk 'NR==FNR{if(!a[$0]++) print}NR>FNR{if(!(a[$0]++)) {print}}' file1 file2
  2. aaa
  3. bbb
  4. ccc
  5. ddd
  6. eee
  7. fff
复制代码
综合起来就可以写成:
awk '!a[$0]++' file1 file2 了....

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


    多谢补充!看来具体情况具体分析是非常必要的,呵呵

论坛徽章:
0
44 [报告]
发表于 2011-09-21 13:43 |只看该作者
不错。学习了

论坛徽章:
0
45 [报告]
发表于 2011-09-22 11:32 |只看该作者
好帖,顶了!

论坛徽章:
0
46 [报告]
发表于 2011-11-14 16:57 |只看该作者
回复 1# yinyuemi


      合并file1和file2,除去重复项:
awk 'NR==FNR{a[$0]=1;print}   #读取file1,建立数组a,下标为$0,并赋值为1,然后打印

NR>FNR{                   #读取file2

if(!(a[$0])) {print }      #如果file2 的$0不存在于数组a中,即不存在于file1,则打印。

}' file1 file2

aaa

bbb

ccc

ddd

eee

fff

a[$0]=1====>为什么要等于1啊,必须这样写么?

论坛徽章:
0
47 [报告]
发表于 2011-11-14 18:00 |只看该作者
真的很好,看了这个后感觉好多以前无解的都豁然开朗了,谢谢楼主分享。

论坛徽章:
0
48 [报告]
发表于 2011-11-15 00:06 |只看该作者
收藏

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
49 [报告]
发表于 2011-11-15 01:20 |只看该作者
回复  yinyuemi


      合并file1和file2,除去重复项:
awk 'NR==FNR{a[$0]=1;print}   #读取file1 ...
tt_yy123 发表于 2011-11-14 16:57



   
a[$0]=1====>为什么要等于1啊,必须这样写么?

    不是必须的,你可以给他赋予任何值,甚至是0.(如果是0的话,你考虑下if语句怎么写?)
    另外,也可以不给数组a赋值,直接使用a[$0], 这样的话,if语句可以使用!($0 in a).

论坛徽章:
0
50 [报告]
发表于 2011-11-21 23:12 |只看该作者
太经典 太强大 无意间看到帖子

收藏之
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP