网站备案链接直接查看,2020网络营销推广方式,昆明网站开发兼职群,个人做小程序商店awk是Linux中一款非常好用的程序#xff0c;可以逐行处理文件#xff0c;并提供了强大的语法和函数#xff0c;和grep、sed一起被称为“Linux三剑客”。
在使用awk处理文件时#xff0c;有时会用到shell中定义的变量#xff0c;由于在shell中变量的调用方式是通过$符号进…awk是Linux中一款非常好用的程序可以逐行处理文件并提供了强大的语法和函数和grep、sed一起被称为“Linux三剑客”。
在使用awk处理文件时有时会用到shell中定义的变量由于在shell中变量的调用方式是通过$符号进行的而在awk中$符号有特殊的含义它可以表示待处理文件的某一列也可以表示所有列即$0因此不能在awk中通过$符号调用shell变量。
下面来介绍两种在awk中调用shell变量的方式。
方式1通过双引号加单引号的方式
语法规则在变量两边加入双引号和单引号即 $var 的形式
示例命令如下
var1shell
var2pythonawk BEGIN {print $var1; print $var2}# 输出结果
# shell
# python这里用到了awk的BEGIN语句即BEGIN { }它是awk程序在没有读取任何数据之前最先执行的语句。
此外这种调用shell变量的方式也可以用在awk后面接文件输入时如下所示
echo -e hello\nhi a.txtvar1shell
var2pythonawk {print $0, $var1 and $var2} a.txt # 这里$0表示文件a.txt的整行
# $0和后面 $var1 之间的 , 是字符串连接方式它允许将多个变量连接成一个字符串# 输出结果
# hello, shell and python
# hi, shell and python不难发现这种调用方式会在awk命令中引入很多的双引号和单引号当命令较多时就会产生混淆可读性非常差容易出现问题。下面介绍一种可读性更好的调用shell变量的方式。
方式2通过-v参数将shell变量转为awk变量
awk非常强大它允许用户自定义变量如下面的代码
awk BEGIN {varhello; print var}# 输出结果
# hello上述命令变量var进行了赋值然后打印了变量var的值。
此外awk提供了一个-v参数可以来对awk中的变量进行赋值示例代码如下
awk -v varhello BEGIN {print var}# 输出结果
# hello在上述命令中通过-v参数在awk中给变量var赋值为了”hello”字符串然后就可以在awk中直接调用var变量最终打印结果为”hello”。
因此可以结合-v参数来将shell变量赋值为awk变量然后在awk中就可以直接使用shell变量的值了示例代码如下
var1shell
var2pythonawk -v a$var1 -v b$var2 BEGIN{print a is a, \nb is b}# 输出结果
# a is shell
# b is python需要注意的是-v参数必须在BEGIN语句的前面才能发挥作用
上述用法也可以用在awk处理文件时如下
awk -v a$var1 -v b$var2 {print a is a, \nb is b} a.txt总结
本文介绍了两种在awk中使用shell变量的方式
方式1awk BEGIN {print $var1; print $var2}
方式2awk -v a$var1 -v b$var2 BEGIN{print a; print b}
本文参考链接
https://www.gnu.org/software/gawk/manual/gawk.htmlhttps://fedingo.com/how-to-use-shell-variables-in-awk-script/