查找带有UPS的机器的简单awk脚本
我有一个文件,列出了我们小型网络上所有机器的名称和位置,以及它们是否有不间断电源(UPS)。该文件具有以下格式:查找带有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
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脚本语法的一部分。我会发布一个答案。。。。