treat.awkの私のコードは次のとおりです。
#!/usr/bin/awk -f
if($1 == "x") cat file
コマンドプロンプトへの私の入力は次のとおりです。
~/home/treat.awk x
次のエラーメッセージが表示されます。
line 1: syntax error at or near if
どうすれば修正できますか?このコードはawkを使用しており、既存のバージョンのawkのみが許可されています。
ファイルには「テスト」。
答え1
それはawk
コードではなくcsh
コードです。シャバンに変えて
#! /bin/csh -f
if($1 == "x") cat file
(これは、-f
のようにファイルをパラメータとして使用しませんが、awk
ユーザーの読み込みはしません~/.cshrc
。)
同じことを行うコードはawk
次のとおりです。
#! /usr/bin/awk -f
BEGIN {
if (ARGV[1] == "x") exit(system("cat file"))
}
合格するとawkの伝統的なバージョン、Solarisなどの1985年以前の非POSIXバージョンを意味する場合、パラメータを参照せずに参照/bin/awk
できないため、これを行うことはできません(パラメータを入力ファイルとして扱う場合を除く)。 Solarisでは、次のように標準に近づきたいと思います。ARGV
FILENAME
/usr/xpg4/bin/awk
awk
mawk
伝統的なバージョンawk
そして構文は実際にサポートされています。
これで、system()
実際にはコマンドラインsh
を解釈するためにシェルを呼び出すので、次のすべての操作を実行することをお勧めします(今世紀にする必要があるよりもはるかに優れています)。cat file
sh
csh
#! /bin/sh -
if [ "$1" = x ]; then
cat file
fi
¹、また!で始まるいくつかのパラメータはオプションとして扱われ-
ますawk
。 GNUでは、she-bangを使用してこの問題を解決awk
できます。#! /usr/bin/gawk -E