スクリプトプログラミング言語であることは分かりますが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}'
からインポートここ。
問題は次のとおりです。
- awkはいつコマンドとして解釈されるべきですか?
- awkはいつプログラムですか?
- 最初の例をコマンドとして呼び出すのに問題がありますか
awk
?
それは次のとおりです。
awk '{print $2}' file.txt | awk '{FS=" "} {print 4}'
プログラムがパイプを使用して通信できることを意味しますかawk
?
ベストアンサー1
awk
2つの呼び出しモードがあります。 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
プログラムはパイプを介して通信できます。