awkスクリプトを書くには?

awkスクリプトを書くには?

スタンドアロンawkスクリプトファイルを作成する方法を理解しようとしています。

スタンドアロンのbashスクリプトファイルに似ていると思います。

#! /usr/bin/awk -f      
BEGIN{
    for  (i  =  0;  i  <  ARGC;  i++)
        printf  "%s  ",  ARGV[i]
    printf  "\n"
}
{print $0}
  1. シェルでコマンドライン引数を指定し、それをスクリプトに渡す方法を見つけようとしています。

    $ myscript.awk arg1 arg2 arg3
    awk  arg1  arg2  arg3  
    awk: /home/tim/myscript.awk:5: fatal: cannot open file `arg1' for reading (No such file or directory)
    

    awkスクリプトにはどのコマンドライン引数が必要ですか?arg1 入力ファイルになると予想されるのはなぜですか?

    コマンドライン引数はawkスクリプトに渡され、ARGV配列に格納されます。私のアップデートをご覧ください。だからコマンドライン引数はawk

  2. -fshebangを削除すると、つまり#! /usr/bin/awk

    $ myscript.awk arg1 arg2 arg3
    awk: cmd. line:1: /home/tim/myscript.awk
    awk: cmd. line:1:                   ^ syntax error
    

    なぜ-f必要ですか?

ありがとうございます。

ベストアンサー1

AWKは、引数がスクリプトのテキストであるか、-f実行されるスクリプトを含むファイル名が続くことを期待しています。どちらの場合も、オプションで処理するファイル名が続きます。

これがshebang行が必要な理由を説明します-f。この行がなければ、AWKはスクリプトのファイル名自体が実行されるAWKステートメントだと思います。

パラメータ処理に関して、AWKプログラムは必要に応じて独自のパラメータ処理を実行できます。次の行でスクリプトが{print $0}失敗します。これは、インタプリタが入力(一部指定したため、コマンドラインに名前が付けられたファイル)から各行を読み取り、ブロックの指示に従って処理するように指示します。その行を削除するとエラーは発生しません。パラメータを処理して入力ファイルのみを含めるようにBEGIN削除すると、AWKは文句を言いません。ARGV

独自のパラメータと入力処理を試みることは、AWKを非常に便利にする多くのものを無視することを意味できます。そうしたい場合は、Perlを使用することをお勧めします。

(shebang処理は単純なAWKスクリプトをファイル名に保存できることを意味するので、スクリプトの賢い名前を見つける必要はありません。誰もそうしないでください...)

おすすめ記事