免费注册 查看新帖 |

Chinaunix

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

请教awk中引用外部变量 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-04 16:05 |只看该作者 |倒序浏览
如下三行代码可打印出需要的结果
datetime="2008-12-17-23"
echo "a" |awk '{print "'$datetime'"}'
  echo "a" |awk -v var1=$datetime '{print var1}'

但:
datetime="2008-12-17-23"
awk  -v var1=$datetime '{if ($1~/var/ && $2=="2"  &&  $3=="0") print $0}' 1.txt
  awk  '{if ($1~/"'$datetime'"/ && $2=="2"  &&  $3=="0") print $0}' 1.txt

都无法获取响应的结果,参数就没有带入
我要实现的是将如下的三个字符串全部用外部变量来传入,望高人指点!
awk '{if ($1~/2008-12-17-23/ && $2=="2"  &&  $3=="0") print $0}' 1.txt | wc

论坛徽章:
0
2 [报告]
发表于 2009-02-04 16:10 |只看该作者
原帖由 zhaoqinghu 于 2009-2-4 16:05 发表
如下三行代码可打印出需要的结果
datetime="2008-12-17-23"
echo "a" |awk '{print "'$datetime'"}'
  echo "a" |awk -v var1=$datetime '{print var1}'

但:
datetime="2008-12-17-23"
awk  -v var ...

awk  -v var1=$datetime '{if ($1~/var1/ && $2=="2"  &&  $3=="0") print $0}' 1.txt

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
3 [报告]
发表于 2009-02-04 16:11 |只看该作者
原帖由 我是DBA 于 2009-2-4 16:10 发表

awk  -v var1=$datetime '{if ($1~/var1/ && $2=="2"  &&  $3=="0") print $0}' 1.txt

里面不会解释成变量吧

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
4 [报告]
发表于 2009-02-04 16:11 |只看该作者
  1. awk  -v var1=$datetime '{if (match($1,var1) && $2=="2"  &&  $3=="0") print $0}' 1.txt
复制代码

论坛徽章:
0
5 [报告]
发表于 2009-02-04 16:12 |只看该作者
see

论坛徽章:
0
6 [报告]
发表于 2009-02-04 16:18 |只看该作者
原帖由 ynchnluiti 于 2009-2-4 16:11 发表
awk  -v var1=$datetime '{if (match($1,var1) && $2=="2"  &&  $3=="0") print $0}' 1.txt




太牛了!!谢谢

后面的等于如何实现啊?我这里急着用,多谢

论坛徽章:
0
7 [报告]
发表于 2009-02-04 16:19 |只看该作者
记的我也问过这个问题,"我是DBA"说可以,但我测试过的确是不行啊.

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
8 [报告]
发表于 2009-02-04 16:26 |只看该作者
原帖由 zhaoqinghu 于 2009-2-4 16:18 发表
后面的等于如何实现啊?我这里急着用,多谢

多个-v或者放在BEGIN块里

  1. var2=2
  2. var3=0
  3. awk  -v var1=$datetime -v f2=$var2 -v f3=$var3 '{if (match($1,var1) && $2==f2 && $3==f3) print $0}' a
复制代码

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
9 [报告]
发表于 2009-02-04 16:30 |只看该作者
原帖由 kvkingdom 于 2009-2-4 16:19 发表
记的我也问过这个问题,"我是DBA"说可以,但我测试过的确是不行啊.

去掉两边的//试试
  1. awk  -v var1=$datetime '{if ($1 ~ var1 && $2=="2"  &&  $3=="0") print $0}'
复制代码

论坛徽章:
0
10 [报告]
发表于 2009-02-04 16:34 |只看该作者

回复 #3 ynchnluiti 的帖子

没太明白,为什么不会解释为变量?
[test@erpdataserver ~]$ datetime="2008-12-17-23"
[test@erpdataserver ~]$ awk -v var1=$datetime 'BEGIN{print var1}'               
2008-12-17-23
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP