结合 Bourne Shell 和 awk

结合 Bourne Shell 和 awk

这是我的实际文件 WASfile

#!/bin/sh
sed -i '/^ *$/d' WASfile  
sed -i -e '/user=/,/group_1=/{w /tmp/1' -e 'd}' /home/wasdm/WASfile;  
Script to Add  
read -p "Press [Enter] to continue for Installation"  

现在,我想将以下脚本放在要添加的脚本然后将 WASfile 作为脚本(它是许多脚本或命令的组合)执行。

#!/usr/bin/awk -f  

BEGIN   { FS="=" }  
NR==FNR { a[$1]=$0; next }  
$1 in a { $0=a[$1] }  
/^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } }  
1    

我想结合并使用如下所示的方法或更好的方法来结合这两个脚本。

#!/bin/sh  
sed -i '/^ *$/d' WASfile  
sed -i -e '/user=/,/group_1=/{w /tmp/1' -e 'd}' /home/wasdm/WASfile;  
#!/usr/bin/awk -f  

BEGIN   { FS="=" }  
NR==FNR { a[$1]=$0; next }  
$1 in a { $0=a[$1] }  
/^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } }  
1  
read -p "Press [Enter] to continue for Installation"  

我无法执行该脚本。

因此,我尝试提取脚本到另一个文件并尝试执行该 AWKscript。但问题是提取后,主脚本WAS文件本身损坏或失效。

#!/bin/sh
sed -i '/^ *$/d' WASfile;
sed -i -e '/\/usr\/bin\/awk/,/baba/{w 1' -e 'd}' WASfile;
#!/usr/bin/awk -f

BEGIN   { FS="=" } NR==FNR { a[$1]=$0; next } $1 in a { $0=a[$1] } /^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } } 1
baba
read -p "Press [Enter] to continue for Installation"

如下

#./WASfile
sed: -e expression #1, char 24: missing command
./WASfile: line 6: BEGIN: command not found
./WASfile: line 7: {: command not found
./WASfile: line 7: next: command not found
./WASfile: line 8: in: command not found
./WASfile: line 9: syntax error near unexpected token `/^#/,'
./WASfile: line 9: `/^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } }  '

答案1

从你的问题中我了解到你的第一个脚本存储在一个名为的文件中WASfile。你必须确保脚本已设置可执行位:

chmod a+x WASfile

然后您可以执行脚本:./WASfile。由于当前目录默认不在变量中,因此PATH您必须明确指定当前目录./或绝对路径的路径/home/wasadm/WASfile

这同样适用于 AWK 脚本:使其可执行并使用指定路径调用它。

您可以从WASfile脚本中调用它,就像从命令行调用它一样。命令行也是一个 shell - 与执行第一个脚本的 shell 相同或相似。

#!/bin/sh
sed -i '/^ *$/d' WASfile
sed -i -e '/user=/,/group_1=/{w /tmp/1' -e 'd}' /home/wasadm/WASfile
/path/to/the/AWKscript inputfile1 inputfile2 >outputfile1
read -p "Press [Enter] to continue for Installation"

上述代码将运行AWKscript存储在/path/to/the目录中的脚本。使用具有自描述名称的文件作为参数。将您需要的文件放在那里。

另一个选项是显式调用awk。在这种情况下,您不需要启用文件的可执行位。

awk -f /path/to/the/AWKscript

问题中的最后一段代码不起作用

最后一段代码中显示的组合不起作用。类 Unix 系统设计为通过单个解释器执行单个可执行文件。

相关内容