shell文本过滤编程(七):awk之变量传递

本文介绍如何在Shell脚本中将变量值传递给Awk进行处理,包括三种方法:文件名前传递变量、使用-v选项传递变量以及直接在Awk命令中使用Shell变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【版权声明:转载请保留出处:blog.youkuaiyun.com/gentleliu。Mail:shallnew at 163 dot com】
由于awk经常在shell脚本中使用,所以shell脚本中的有些变量要传递到awk中使用,这一节就说一下awk引用shell中的变量方法。
为避免屏幕输出太多东西,我们先将被操作文件该为一行,如下:
# catgroup_file3
vboxusers:x:984:allen
1、 文件名之前传递变量。
格式如下:awk '{print var1, var2}' var1=aaa var2=bbb filename

#!/bin/sh
 
shell_var="test"
awk '{printvar}' var=$shell_var group_file3
输出结果为:
#./61_awk_var.sh
test
这里变量赋值要放在文件名之前,否则变量值会取不到。比如如果脚本这样写不会输出变量值。
#!/bin/sh
 
shell_var="test"
awk '{print var}'group_file3 var=$shell_var
其实这种方法在BEGIN中无法使用变量,比如这样写脚本:
#!/bin/sh
 
shell_var="test"
 
awk '
BEGIN{
    print "begin output var:" var
}
{
    print var
}
END{
    print "end output var:" var
} 'var=$shell_var group_file3
输出结果为:
#./64_awk_var.sh
begin outputvar:
test
end outputvar:test
2、 使用-v传递变量。
格式如下:awk -v var=$shell_var '{print var}' filename
#!/bin/sh
 
shell_var="test"
awk -vvar=$shell_var '{print var}'  group_file3
再试试该值在BEGIN中是否可以使用:
#!/bin/sh
 
shell_var="test"
 
awk -vvar=$shell_var '
BEGIN{
    print"begin output var:" var
}
{
    print var
}
END{
    print "end output var:" var
} ' group_file3


执行结果:
#./63_awk_var.sh
begin outputvar:test
test
end outputvar:test
这种方法传递的变量在BEGIN可以使用。
3、 直接使用shell变量。
格式如下:awk '{print "'$shell_var'"}' filename,注意:先用双引号,再用单引号。
#!/bin/sh
 
var="test"
 
awk '
BEGIN{
    print "begin outputvar:" "'$var'"
}
{
    print "'$var'"
}
END{
    print "end outputvar:" "'$var'"
} ' group_file3
执行结果:
# ./65_awk_var.sh  
begin output var:test
test
end output var:test
 
变量传递不但可以传递自定义变量,还可以传递环境变量,用法同自定义变量类似。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值