![结合 Bourne Shell 和 awk](https://linux22.com/image/1386438/%E7%BB%93%E5%90%88%20Bourne%20Shell%20%E5%92%8C%20awk.png)
这是我的实际文件 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 系统设计为通过单个解释器执行单个可执行文件。