awkはいつコマンドまたはプログラミング言語として解釈されますか?

awkはいつコマンドまたはプログラミング言語として解釈されますか?

スクリプトプログラミング言語であることは分かりますがawk、いつコマンドで解釈すべきか、プログラムで解釈すべきか混乱することがあります。

例えば。 1-ここではコマンドとして解釈します。:

awk '{print $2}' file.txt

例えば。 2-ここでは awk プログラムとして解釈します。:

awk 'BEGIN      {skip = 0} \
        skip == 0  {if (NF == 0) 
                     {skip = 1}  \
                    else 
                     {print};  \
                    next} \
        skip == 1  {print; \
                    skip = 0; \
                    next}'

からインポートここ

問題は次のとおりです。

  1. awkはいつコマンドとして解釈されるべきですか?
  2. awkはいつプログラムですか?
  3. 最初の例をコマンドとして呼び出すのに問題がありますかawk

それは次のとおりです。

awk '{print $2}' file.txt | awk '{FS=" "} {print 4}'

プログラムがパイプを使用して通信できることを意味しますかawk

答え1

awk2つの呼び出しモードがあります。 1つはコマンドラインのプログラムテキストを使用し、もう1つはファイル内のプログラムを使用します。これはawkのマニュアルページの概要で説明されています(Ubuntu 12.04のmawkで):

   mawk  [-W  option] [-F value] [-v var=value] [--] 'program text' [file
   ...]
   mawk [-W option] [-F value]  [-v  var=value]  [-f  program-file]  [--]
   [file ...]

最初のフォームをプログラムとして呼び出すかどうかは、使用するプログラムの定義によって異なります。どちらの形式もプログラムに関連しており、最初の形式はプログラムをコマンドライン引数として指定すると言いたいと思います。どちらの例もこのオプションを含まないため、最初の形式です-f。この時点で、2番目の例に複数行のコマンドライン引数があることは関係ありません。

これは一意ではありませんawk。たとえば、デフォルトではPythonはコマンドライン引数をプログラム名として解釈しますが、この-cオプションを使用すると、コマンドラインでプログラムを指定できます(つまり、デフォルトとは反対awk)。

これに関連しないのはパイプを使った通信です。これはシェル構文とオペレーティングシステムによって処理され、スクリプトが実行する必要がある唯一の作業は、を表す標準出力に書き込むことです。標準入力から読み出します。はい。awkプログラムはパイプを介して通信できます。

答え2

厳密に言えば、電話するときアッ、あなたは言語ではなく通訳を意味します。言語と呼ばれますAWK

awk(またはmawk、)は、プログラミング言語で書かれたプログラムをnawk実行するユーティリティプログラムです。AWK

POSIXで定義されているように、awkプログラム例:

プログラム

-fオプションが指定されていない場合、awkの最初のオペランドはawkプログラムのテキストでなければなりません。アプリケーションは、awkに単一の引数でプログラムオペランドを提供する必要があります。テキストがaで終わらない場合、awkはテキストをaと解釈します。

したがって、オプションを使用しない場合は、両方の-f例をawkプログラムとして扱うことができます。

関連情報