免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3961 | 回复: 11
打印 上一主题 下一主题

[文本处理] awk index空字符的诡异问题 [复制链接]

论坛徽章:
7
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:18程序设计版块每日发帖之星
日期:2015-08-09 06:20:00每日论坛发贴之星
日期:2015-08-09 06:20:00程序设计版块每日发帖之星
日期:2015-08-22 06:20:00程序设计版块每日发帖之星
日期:2015-08-27 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-17 18:00 |只看该作者 |倒序浏览
请教下各位大神一个很奇怪的现象:

[BA log]$ cat test
a,b,,
a,b,b,
a,b,cd,

[BA log]$  awk -F"," 'BEGIN{a="cdrr"}{print index(a,$3), $3}' test
1
0 b
1 cd

也就是说我想找$3在a字符串里面的位置,但是如果$3是空字符,它也给我返回了1. 这个是怎么回事?

麻烦各位了!

论坛徽章:
0
2 [报告]
发表于 2012-10-17 18:37 |只看该作者
本帖最后由 kk5234 于 2012-10-18 10:47 编辑

index(s, t)
如果t字符串存在与s字符串中,则返回它在s中开始出现的位置,否则返回0。
第一行,$3为空,它存在于a变量中,返回1
第二行,$3为b,它不存于a变量中,返回0
第三行,$3为cd,它存在于a变量中,返回1

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
3 [报告]
发表于 2012-10-17 19:00 |只看该作者
回复 2# kk5234


    index的返回值是t在s中的位置,而不止是1和0。

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
4 [报告]
发表于 2012-10-17 20:22 |只看该作者
  1. [root@cloud ~]# echo "abcde"|awk '{print index($0,"cd")}'
  2. 3
  3. [root@cloud ~]# echo "abcde"|awk '{print match($0,"cd"),RSTART,RLENGTH}'
  4. 3 3 2
复制代码

论坛徽章:
7
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:18程序设计版块每日发帖之星
日期:2015-08-09 06:20:00每日论坛发贴之星
日期:2015-08-09 06:20:00程序设计版块每日发帖之星
日期:2015-08-22 06:20:00程序设计版块每日发帖之星
日期:2015-08-27 06:20:00
5 [报告]
发表于 2012-10-18 09:58 |只看该作者
空字符也算出现?那这样怎么区分是匹配到我真正想要的还是空呢?

论坛徽章:
7
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:18程序设计版块每日发帖之星
日期:2015-08-09 06:20:00每日论坛发贴之星
日期:2015-08-09 06:20:00程序设计版块每日发帖之星
日期:2015-08-22 06:20:00程序设计版块每日发帖之星
日期:2015-08-27 06:20:00
6 [报告]
发表于 2012-10-18 10:03 |只看该作者
回复 2# kk5234


    就是想怎么才能回避去匹配空,有没有简单的办法不用去做if判断的? 谢谢啊

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
7 [报告]
发表于 2012-10-18 10:07 |只看该作者
回复 6# tuyajie


    如此:
  1. awk -F"," 'BEGIN{a="cdrr"}$3!=""{print index(a,$3), $3}' test
复制代码

论坛徽章:
7
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:18程序设计版块每日发帖之星
日期:2015-08-09 06:20:00每日论坛发贴之星
日期:2015-08-09 06:20:00程序设计版块每日发帖之星
日期:2015-08-22 06:20:00程序设计版块每日发帖之星
日期:2015-08-27 06:20:00
8 [报告]
发表于 2012-10-18 10:34 |只看该作者
回复 7# yestreenstars


  嗯,非常感谢!我目前也是i这样用的。我只是觉得index这个算bug么?毕竟没多少人会说去找一个空字符吧?

论坛徽章:
0
9 [报告]
发表于 2012-10-18 10:48 |只看该作者
回复 3# yestreenstars

是的,谢谢!
   

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
10 [报告]
发表于 2012-10-18 10:56 |只看该作者
回复 8# tuyajie


    不算bug吧,这跟高中学的集合有点相似:空集是一切集合的子集。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP