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

查找带有UPS的机器的简单awk脚本,awk,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_文件其中$HOME是一个环境变量 但是,我想编写一个a

我有一个文件,列出了我们小型网络上所有机器的名称和位置,以及它们是否有不间断电源(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_文件
其中$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行:打印:未找到命令 第38行:打印:未找到命令 第39行:意外标记“}”附近的语法错误

期望输出

The following computers in the department have UPS
Computer Location
beta in office 2
delta in reception
我想你想要

#!/usr/bin/awk -f
# script follows
BEGIN ....
在一个可执行文件中。文件中的第一行(
#!…
)指示Unix使用指定的可执行文件(
/usr/bin/awk
)运行文件的其余部分(您的
awk
脚本)

我想您需要

#!/usr/bin/awk -f
# script follows
BEGIN ....

在一个可执行文件中。文件中的第一行(
#!…
)指示Unix使用指定的可执行文件(
/usr/bin/awk
)运行文件的其余部分(您的
awk
脚本)

脚本应以

#!/usr/bin/awk -f

(这是一个。)

脚本应该以

#!/usr/bin/awk -f

(这是一个。)

摆脱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


还要注意的是,我去掉了所有空语句(伪尾随分号)。

去掉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


还要注意,我去掉了所有的空语句(伪尾随分号)。

实际上需要
-f
;shebang使内核将脚本文件作为下一个参数传递。如果没有
-f
,Awk希望脚本的实际文本作为命令行参数。@BrianAgnew不敢相信我忽略了shebang。我现在遇到的问题来自if(~/UPS/){print$1,$2;}$HOME/network\u文件,它在tildat处给了我一个语法错误
-f
实际上是需要的;shebang使内核将脚本文件作为下一个参数传递。如果没有
-f
,Awk希望脚本的实际文本作为命令行参数。@BrianAgnew不敢相信我忽略了shebang。我现在遇到的问题来自if(~/UPS/){print$1,$2;}$HOME/network_文件,它在tildaI上给了我一个语法错误,真不敢相信我漏掉了shebang。我现在遇到的问题来自
,如果(~/UPS/){print$1,$2;}$HOME/network\u file
,它会在tildat处给我一个语法错误,那就是
(/UPS/)
,没有
~
,但是您有更大的问题,因为您试图使用shbang来执行awk脚本,但包括文件名,这是调用awk的SHELL脚本语法的一部分。我会发布一个答案……我不敢相信我漏掉了shebang。我现在遇到的问题来自
,如果(~/UPS/){print$1,$2;}$HOME/network\u file
,它会在tildat处给我一个语法错误,那就是
(/UPS/)
,没有
~
,但是您有更大的问题,因为您试图使用shbang来执行awk脚本,但包括文件名,这是调用awk的SHELL脚本语法的一部分。我会发布一个答案。。。。