如何使 AWK 使用在 Bash 脚本中创建的变量
我的脚本看起来像这样
#!/bin/bash
#exampel inputfile is "myfile.txt"
inputfile=$1
basen=`basename $inputfile .txt` # create basename
cat $inputfile |
awk '{print $basen "\t" $3} # this doesn't print "myfile" but the whole content of it.
我上面想做的是在 AWK 中打印出之前创建的名为“basen”的变量。 但不知何故,它未能达到我希望的效果。
因此,例如 myfile.txt
包含这些行
foo bar bax
foo qux bar
对于上面的 bash 脚本,我希望得到
myfile bax
myfile bar
正确的方法是什么?
I have script that looks like this
#!/bin/bash
#exampel inputfile is "myfile.txt"
inputfile=$1
basen=`basename $inputfile .txt` # create basename
cat $inputfile |
awk '{print $basen "\t" $3} # this doesn't print "myfile" but the whole content of it.
What I want to do above is to print out in AWK the variable called 'basen' created before.
But somehow it failed to do what I hoped it will.
So for example myfile.txt
contain these lines
foo bar bax
foo qux bar
With the above bash script I hope to get
myfile bax
myfile bar
What's the right way to do it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
-v
标志用于从命令行设置变量。尝试这样的事情:The
-v
flag is for setting variables from the command line. Try something like this:你可以像这样使用它。
你应该使用
使用
在 Bash 脚本中创建。
You can use it like this.
You should use
in AWK to use the
created in Bash Script.
你可以在 awk 中完成所有操作
you can just do everything in awk
假设您运行 awk 作为您声明变量的 shell 的子进程
在 shell 中
结果:
注意到导出的重要性。如果没有它,则考虑来自 shell 的变量
本地的并且不会传递给协同进程。
Assuming you run awk as the sub process of the shell you declared the vars
Within the shell
Result:
notice the importance of export. With out it, the vars from the shell is considered
local and does not get passed to the co-processes.
原因是 bash 变量(环境变量)不会在单引号字符串中扩展。尝试替换
为
The reason is that bash variables (environment variables) are not expanded within single-quoted strings. Try replacing
with
最简单的方法是创建一个 awk 变量。
awk -v awkvar=$bashvar 'awkscript'
。The easiest way is to make an awk variable.
awk -v awkvar=$bashvar 'awkscript'
.