0

我有一个文件,列出了我们小型网络上所有机器的名称和位置,以及它们是否具有不间断电源 (UPS)。该文件具有格式

alpha % in office 1 %
beta  % in office 2 %UPS
gamma % in office 1 % 
delta % in reception %UPS

awk -F '%' '/UPS/ {print $1, $2}' $HOME/network_file我可以使用$HOME 是环境变量的命令行轻松地在 awk 单行程序中找到机器名称和位置 。

但是,我想编写一个 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: command not found line 37: print: command not found line 38: print: command not found line 39: syntax error near unexpected token `}'

期望的输出

The following computers in the department have UPS
Computer Location
beta in office 2
delta in reception
4

3 回答 3

2

脚本应该以

#!/usr/bin/awk -f

(那是一个shebang。)

于 2013-03-19T11:17:06.430 回答
1

我想你想要

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

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

于 2013-03-19T11:15:02.080 回答
1

摆脱 shebang,只需编写一个在您想要的文件上调用 awk 的 SHELL 脚本:

/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。

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

于 2013-03-19T11:54:07.490 回答