如何在shell脚本中将变量传给awk

1 篇文章 0 订阅

使用shell脚本比较多,脚本中也往往会使用awk处理类似表单的文件。这就会遇到shell中的变量可能会用在awk脚本中使用,如路径,这是最有可能遇到的。


问题在于,shell脚本中的变量是不可以直接用在内嵌的awk脚本中的,虽然感觉awk就像shell的一个命令一样。

实例如:


#! /bin/bash -

...

path="/home/users/..../file"

awk -F "\t" 'BEGIN{whlie(getline<"$path">0) x[$1]=1} {...}' another.file > result.file


当我直接使用shell中的路径变量path时,我没有任何觉得不对劲的地方,但脚本执行后就是没有结果。当然,因为awk中的path非shell脚本的path。例子中awk的path其实是个未初始化的path变量!


如何将shell中的path变量传给awk脚本呢?


必须使用awk的 -v 选项,上面的例子中,在awk的执行语句之前用shell脚本中的变量初始化awk要用到的文件路径:


awk -F "\t" -v filename=$path 'BEGIN{whlie(getline<filename>0) x[$1]=1} {...}' another.file > result.file


注意:

1. 每个初始化变量都必须单独跟在一个 -v 选项之后,即 -v var1=value1 -v var2=value2 ...

2. awk也可以在执行语句之后使用var=value的方式初始化变量,但这样的变量不能用于BEGIN的action语句中。

awk -F "\t"  'BEGIN{whlie(getline<filename>0) x[$1]=1} {...}'  filename=$path another.file > result.file

这条语句的执行同样得不到结果。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值