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

(それはシバンです。)

于 2013-03-19T11:17:06.430 に答える
1

私はあなたが欲しいと思います

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

1 つの実行可能ファイルで。ファイルの最初の行 ( ) は、指定された実行可能ファイル ( ) を使用して残りのファイル (スクリプト)を#!...実行するように Unix に指示します。/usr/bin/awkawk

于 2013-03-19T11:15:02.080 に答える
1

シバンを取り除き、必要なファイルで 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 を使用してください。

また、null ステートメント (誤った末尾のセミコロン) をすべて削除したことにも注意してください。

于 2013-03-19T11:54:07.490 に答える