File 是否可以合并bash和awk脚本文件?
我有一些bash脚本,从中获取变量的值,我希望在awk中使用这些值。 是否可能在bash中包含整个awk(就像bash脚本文件一样)文件,例如:File 是否可以合并bash和awk脚本文件?,file,bash,awk,File,Bash,Awk,我有一些bash脚本,从中获取变量的值,我希望在awk中使用这些值。 是否可能在bash中包含整个awk(就像bash脚本文件一样)文件,例如: #!/bin/sh var1=$1 source myawk.sh 和myawk.sh: print $1; Bash和awk是不同的语言,每种语言都有自己的同名解释器。您展示的小样本被剥离得太远,没有多大意义: 您已经将这两个文件都标记为shell脚本;一个使用shebang#/bin/sh和另一个使用扩展名.sh。显然,shell可以读取sh
#!/bin/sh
var1=$1
source myawk.sh
和myawk.sh:
print $1;
Bash和awk是不同的语言,每种语言都有自己的同名解释器。您展示的小样本被剥离得太远,没有多大意义:
#/bin/sh
和另一个使用扩展名.sh
。显然,shell可以读取shell脚本,这样做的命令在BourneShell中被称为
(或者在csh和bash中被称为source
)李>
set
命令;在awk中,它来自解析的输入行)李>
这两种工具通常是同时使用的,因为shell更擅长组合单独的程序,而awk更擅长重新格式化表格或结构化文本。这是如此的普遍,以至于一种完整的语言进化来结合这些任务;Perl的根是shell、awk和sed的组合
如果您只是想将一个变量从shell脚本传递到awk脚本中,请使用-v。手册页是您的朋友。首先,如果您正在编写bash,请不要使用
#/bin/sh
这将使您进入兼容模式,这仅在您为可移植性而编写时才是必要的(然后您必须遵守POSIX规范)
现在,关于您的问题,您只需从bash脚本内部运行awk,如下所示:
#!/bin/bash
var1=$1
awk -f myawk.sh
#!/bin/env bash
#Bash things start
...
var1=$1
#Bash things stop
#Awk things start,
#may use pipes or variable to interact with bash
awk -v V1=var1 '
#AWK program, can even include awk scripts here.
'
#Bash things
我想您也应该使用.awk作为扩展名。或者,许多ppl会这样做:
#!/bin/bash
var1=$1
awk -f myawk.sh
#!/bin/env bash
#Bash things start
...
var1=$1
#Bash things stop
#Awk things start,
#may use pipes or variable to interact with bash
awk -v V1=var1 '
#AWK program, can even include awk scripts here.
'
#Bash things
我建议这里有Bruce Barnett的这一页:
您也可以使用双引号来利用shell的提取功能,但这会让人困惑
就我个人而言,我只是尽量避免在bash或awk中添加那些花哨的gnu,并使我的脚本与ksh+(n)awk兼容。作为一个硬核awk用户,我很快意识到,做以下事情确实是一个巨大的帮助:
#bashrc的内容
导出AWK\u REPO=~/bin/AWK
.AWK
扩展名编写的每个AWK脚本都存储在那里awk-f$awk\u REPO/myScript.awk$file
甚至,使用Shebangs并将AWK_REPO添加到PATH(使用
导出PATH=${AWK_REPO}:${PATH}
)myScript.awk$文件
组合
bash
和awk
?它现在被称为Perl:P,说真的,我不太确定你在问什么。。。你想干什么?。仅意味着对于当前目录,您可以使用绝对路径运行任何脚本/程序。不要混淆该命令。使用目录。;两者实际上都不是指当前目录!您将找到该命令。接受任何路径和目录。存在于任何目录中;但是不以/开头的路径名将从当前目录开始,所以。实际上是从自身.Dot中引用当前目录。始终表示当前目录,如果运行ls-la:您将收到:。对于当前目录,以及。。对于up目录。这是一个简单的观察。不。表示包含的目录。试试ls-di$PWD........//编码>并比较inode编号。有一个。顺便说一句,MS-DOS实际上没有Unix风格。或而是模仿他们;它还具有每个设备的当前工作目录的概念。那时候情况就大不一样了。