简单的awk脚本来查找带有UPS的机器

时间:2013-03-19 11:10:43

标签: awk

我有一个文件,列出了我们小型网络上所有机器的名称和位置,以及它们是否具有不间断电源(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

3 个答案:

答案 0 :(得分:2)

脚本应以

开头
#!/usr/bin/awk -f

(那是shebang。)

答案 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。

另请注意,我摆脱了所有的空语句(虚假的尾随分号)。