Bash将Shell变量传递到Awk脚本
时间:2020-01-09 10:42:03 来源:igfitidea点击:
如何在Linux或者类似UNIX的操作系统下将Shell变量传递给awk命令或者脚本?
如何在awk脚本中使用shell变量?
如何允许awk使用shell变量?
有两种方法可以将命令行shell变量传递到awk脚本。
本教程说明如何使用各种方法将Shell变量放入awk。
Bash使用-v选项将Shell变量传递给Awk
-v选项可用于将shell变量传递给awk命令。
考虑以下简单示例:
root="/webroot" echo | awk -v r=$root '{ print "shell variable $root value is " r}'
它可与在Linux,* BSD,macOS和类Unix系统上运行的各种版本的awk配合使用。
如何在awk脚本中使用shell变量?
该变量在BEGIN块中也可用。
例如:
a=5 awk -v var=$a 'BEGIN{ ans=var*2} { print ans}'<<</dev/null
如何将多个shell变量传递给awk
将多个`-v'传递给awk的语法如下:
x=10 y=30 text="Total is : " awk -v a=$x -v b=$y -v c="$text" 'BEGIN {ans=a+b; print c " " ans}'
在Linux和类Unix系统上将命令行Shell变量传递给awk
AWK和命令替换
命令替换仅意味着运行shell命令并将其输出存储到变量或者使用echo命令显示回去。
例如,使用shell变量显示日期和时间:
today=$(date) echo "$today"
可以允许awk使用通过命令替换创建的shell变量,如下所示:
## bash ## awk -v today="$(date)" 'BEGIN {print today}' ## more portable ## awk -v today="`date`" 'BEGIN {print "Today is " today}'
在此示例中,使用awk搜索文件如下:
#!/bin/bash # Usage : Search word using awk for given file. # Syntax: ./script "word-to-search" fileToSearch s= i= awk -v search="$s" '$ ./script.sh "Hyman" /etc/passwd~ search' "$i"
保存并关闭文件。
如下运行:
Hyman:x:1000:1000:,,,:/home/Hyman:/bin/bash
输出示例:
echo "$BASH" echo "$USER" echo "$HOME" export demo="Om nom nom" awk 'BEGIN{print ENVIRON["HOME"]}' awk 'BEGIN{print ENVIRON["demo"]}' var="value" awk 'BEGIN{print ENVIRON["var"]}' awk 'BEGIN{print "Hello, "ENVIRON["USER"], "! Home dir " ENVIRON["HOME"]}'
如何使用ENVIRON访问AWK中的Shell环境变量
您需要使用ENVIRON
shell变量。
在gnu/awk手册页中:
包含当前环境值的数组。
该数组由环境变量索引,每个元素都是该变量的值(例如,ENVIRON [HOME]可能是/home/arnold)。
更改此数组不会影响gawk通过重定向或者system()函数生成的程序所看到的环境。
例如,使用awk打印$BASH和$USER shell变量:
awk 'BEGIN {print ARGV[0]}' os="Linux" awk 'BEGIN {print ARGV[1]}' "$os" a=10 b=20 awk 'BEGIN {print ARGV[1] " " ARGV[2]}' $a $b awk 'BEGIN {total=ARGV[1] + ARGV[2]; print total}' $a $b
关于ARGV的说明
ARGV是传递给awk的命令行参数数组。
该数组的索引从0到ARGC1。
动态更改ARGV的内容可以控制用于数据的文件。
让我们看看如何将ARGV与awk和shell变量一起使用:
eval $(awk 'BEGIN{ print "vech=Bus"}' < /dev/null) echo $vech
使用awk设置shell变量
您可以使用eval命令,如下所示:
Bus
输出示例:
##代码##