Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3032911
  • 博文数量: 272
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5496
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2011-06-15 16:44:59

    如何测试一个字符串在另外一个字符串里?比如a="11",b="11 22 33 44",如何判断a是否存在与b中?这就需要用index()函数。我们讲一个例子:
 
文件a:
36  18  19  70  97  
66  71  13  23  48  
23  68  88  11  12
 
文件b:
97  19  18  36  18  28  71
53  24  33  48  13  66  25
55  12  11  75  36  23  19
 
要求文件a里对应文件b里的行,如果文件a里出现过的数字,在文件b里标记出来。
 
  1. $ awk '{getline v<"a";for(i=1;i<=NF;i++)if(index(v,$i))$i="-"$i}1' b
  2. -97 -19 -18 -36 -18 28 71
  3. 53 24 33 -48 -13 -66 25
  4. 55 -12 -11 75 36 -23 19

[解析]

index(s, t)        Returns the index of the string t in the string s.

返回t字符串存在与s字符串中位置的正整数,不存在则返回0。

 

  1. awk 'ARGIND==1{for(i=1;i<=NF;i++)a[FNR","$i];next}{for(i=1;i<=NF;i++){FNR","$i in a?$i="-"$i:0}}1' a b
阅读(20833) | 评论(3) | 转发(1) |
给主人留下些什么吧!~~

zooyo2014-10-16 20:22:17

autozhao:[解析]
index(s, t)        Returns the index of the string t in the string s.
如果t字符串存在与s字符串中,则返回1,否则返回0。

语句解释不对,翻译过来就是t字符串在s字符串中的位置。得到的是一个整数值。 不是用来做判断使用的。比如:
[root@cdn01 ~]# awk 'BEGIN{print index("root","t")} '
4

谢谢指正

回复 | 举报

autozhao2014-10-16 08:46:15

[解析]
index(s, t)        Returns the index of the string t in the string s.
如果t字符串存在与s字符串中,则返回1,否则返回0。

语句解释不对,翻译过来就是t字符串在s字符串中的位置。得到的是一个整数值。 不是用来做判断使用的。比如:
[root@cdn01 ~]# awk 'BEGIN{print index("root","t")} '
4

yestreenstars2013-01-07 20:02:24

第一个方法有bug,还是第二个方法好。把b文件的19改成1一试就知道了。