Chinaunix

标题: awk 如何判断一个value是否在数组中 [打印本页]

作者: wjldrogan    时间: 2013-01-29 01:07
标题: awk 如何判断一个value是否在数组中
求助
awk -F"," 'BEGIN{s="1,2,7,8,21,19,13,14,15,22";split(s,a,",")} 这样子的数组a,我想判断value是否在数组中如何去做?
作者: blackold    时间: 2013-01-29 06:39
本帖最后由 blackold 于 2013-01-29 07:03 编辑

回复 1# wjldrogan


    写个循环
  1. for (i in a) if( a[i] == value) ...
复制代码

作者: dn833    时间: 2013-01-29 07:01
二楼起的真早
作者: bikong0411    时间: 2013-01-29 08:59
回复 3# dn833


    猫头鹰不睡觉的,哈哈
作者: seesea2517    时间: 2013-01-29 09:22
回复 2# blackold

in 就可以判断了:
  1. [seesea@UC ~]$ awk -F"," 'BEGIN{s="1,2,7,8,21,19,13,14,15,22";split(s,a,","); print (1 in a) }'  
  2. 1
  3. [seesea@UC ~]$ awk -F"," 'BEGIN{s="1,2,7,8,21,19,13,14,15,22";split(s,a,","); print (1111 in a) }'
  4. 0
复制代码

作者: blackold    时间: 2013-01-29 09:28
回复 5# seesea2517

这个如何?

  1.     $ awk -F"," 'BEGIN{s="1,2,7,8,21,19,13,14,15,22";split(s,a,","); print (3 in a) }'
  2. 1
复制代码

作者: seesea2517    时间: 2013-01-29 09:35
回复 6# blackold


    呃……原来要判断的是值啊,in 是对下标来做判断的。
嗯,那可以找另一个方案,如果 lz 的这个判断操作要经常用的话,就可以做一个以值为下标的数组来做判断,就省去写很多循环了~
作者: blackold    时间: 2013-01-29 09:43
回复 7# seesea2517


    嗯,不知道新版本 awk 有没有把值转换为键的函数。
作者: wjldrogan    时间: 2013-01-29 14:41
多谢,我准备用for循环判断下回复 2# blackold


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2