我有一个文件,列出了我们小型网络上所有机器的名称和位置,以及它们是否具有不间断电源(UPS)。该文件的格式为
alpha % in office 1 %
beta % in office 2 %UPS
gamma % in office 1 %
delta % in reception %UPS
我可以使用命令行在awk单行中轻松找到机器名称和位置
awk -F '%' '/UPS/ {print $1, $2}' $HOME/network_file
其中$ HOME是一个环境变量。
但是,我想写一个awk脚本来添加一些额外的功能。我试过以下
#!/usr/bin/awk -f
BEGIN {
FS="%";
OFS=" ";
print "The following computers in the department have UPS \n";
print "Computer\tLocation";
}
{
if (~/UPS/) {print $1,$2;} $HOME/network_file
}
这不起作用,我收到几条错误消息,包括 BEGIN:找不到命令 第37行:print:找不到命令 第38行:print:找不到命令 第39行:意外标记附近的语法错误`}'
期望的输出
The following computers in the department have UPS
Computer Location
beta in office 2
delta in reception
答案 0 :(得分:2)
答案 1 :(得分:1)
我想你想要
#!/usr/bin/awk -f
# script follows
BEGIN ....
在一个可执行文件文件中。文件中的第一行(#!...
)指示Unix使用指定的可执行文件(/usr/bin/awk
)来运行文件的其余部分(您的awk
脚本)
答案 2 :(得分:1)
摆脱shebang,只需编写一个SHELL脚本,在你想要的文件上调用awk:
/usr/bin/awk -F'%' '
BEGIN {
print "The following computers in the department have UPS \n"
print "Computer\tLocation"
}
/UPS/ {print $1,$2}
' "$HOME/network_file"
如果您在Solaris上,请注意/ usr / bin / awk是旧的,破坏的awk是您绝对不能使用的 - 请使用/ usr / xpg4 / bin / awk或nawk。
另请注意,我摆脱了所有的空语句(虚假的尾随分号)。