LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1150|回复: 7

动态地往awk的正则表达式里传字符串,可能吗?[基本解决]

[复制链接]
发表于 2004-6-7 16:06:27 | 显示全部楼层 |阅读模式
比如我有一个文本A,有12行,每一行都包含了一个字符串,
我想在文本B里轮流查询A中12个字符串中的每一个是否出现,出现的话就打印B中的相应行.
我在sh脚本里用个变量来表示字符串,可是我觉得这个变量没法在awk命令中的
正则表达式中使用.
这个想法对吗?或者有什么变通方法?
发表于 2004-6-7 16:34:36 | 显示全部楼层
用awk的-v 选项,可以吧shell的变量传到awk里
或者把样本贴出来,大家帮你看看 ;)
 楼主| 发表于 2004-6-7 16:59:38 | 显示全部楼层
我把shell的变量传给awk后,想在awk的if语句中将该变量和正则表达式一起用.
比如:

#!/bin/sh
var="12"
awk -f test.awk VAR=$var test.data

test.awk如下:
{
  if($1~/NUM=11/) print $0
}

如果我想把"/NUM=11/"中的11用VAR来提领,也就是说VAR的值不只是11,还可以是12,13,14...,然后在一个循环中来处理.

我觉得无法办到.
发表于 2004-6-7 17:03:39 | 显示全部楼层
是可以的:
比如:

  1. n=1;while ((n<=10));do awk -v var=$n 'BEGIN{print var}';((n+=1));done
复制代码

awk手册里应该有介绍
http://www.linuxsir.cn/bbs/showthread.php?threadid=103785
 楼主| 发表于 2004-6-7 17:08:32 | 显示全部楼层
我遇到的困难在于awk脚本中的正则表达式是否可以复合awk变量来作用,不是从sh往awk传值.
发表于 2004-6-7 17:38:17 | 显示全部楼层
这是awk引用外部变量的其中一种方式。
请参阅旧帖子,我已有说明:
http://www.linuxsir.cn/forum.php?mod=viewthread&tid=103390

模式引用(在正则表达式中引用外部变量) '"$extvar"'
发表于 2004-6-7 17:46:01 | 显示全部楼层
呵呵,我的理解也许有问题
我理解是这样的
/home/lee#\
>while :;do read;awk -v var=$REPLY 'BEGIN{if(var~/^y/)print "ok";else print "no"}';done
j
no
y
ok
k
no
 楼主| 发表于 2004-6-7 20:46:30 | 显示全部楼层
已经解决了问题,非常感谢home_king和javalee.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表