nawk [-F re] -f program-file [file-list] nawk [-F re] program [file-list] -F re : 入力区切り文字を正規表現 re とします -f program-file : program-file で指定されたファイルを nawk に対するプ ログラムとして実行します file-list : nawk が対象とするファイルのリスト program : nawk の命令からなるプログラム(文字列.「 ' 」で囲 む必要があります) nawk のプログラムはパターンとそれに対応する動作が書かれた以下の様な行 で成り立っています. パターン {動作} 1)パターン パターンとしては,正規表現をスラッシュ( / )で囲んだものが使用さ れます.この場合,入力された行の中に適合する文字列が存在すれば, その行に対して指定された動作が実行されます.また,特定のフィール ドやプログラムで使用している変数と,正規表現との関係を調べる関係 演算子を使用できます.関係演算しとしては以下のものを使用できます. ~,<,<=,==,!=,>=,> なお,それらを論理演算子 ( ||, && ) で結合することも可能です.入力処理 開始時と終了時の処理を記述するために,BEGIN と END という特別なパタ ーンが用意されています. 2)動作 パターンの適合が起こった時に行われる動作を記述します.この処理を 記述するために,以下の様な nawk 独自の組み込み変数や関数を使用でき ます. 変数 NR : 現在処理しているレコード(行)番号 $0 : 現在処理しているレコード全体 NF : レコードに含まれているフィールドの数 $1~#n : 各フィールドの内容 FS : 入力フィールドの区切り記号(通常,ブランク) OFS : 出力フィールドの区切り記号(通常,ブランク) RS : 入力レコードの区切り記号(通常,改行) ORS : 出力レコードの区切り記号(通常,改行) FILENAME : ファイル名 ARGC : コマンド行の引き数の数 ARGV : コマンド行の引き数配列 関数 cos(expr) : 余弦 exp(expr) : 指数関数 getline : 次の入力行を読み,$0 にセットします getline x : 次の入力行を変数 x に読み込みます index(s1,s2) : s1 の中の s2 の位置(存在しなければ 0 ) int(expr) : 整数部(切り捨て) length(s) : 文字列の長さ log(expr) : 自然対数 sin(expr) : 正弦 split(s,a,c) : s を文字 c によって,a[1]...a[n] に分割し n を返す sprintf(fmt,...) : fmt に従って ... をフォーマットする substr(s,m,n) : s の m 番目から n 文字文取り出す さらに,以下の様な制御文も使用できます(複数 statement を使用する 時は,「 { 」と「 } 」を使用). if (condition) statement1 else statement2 for (expresion1; condition; expresion2) statement while (condition) statement
nawk '{print NR,$0}' test.c
nawk '{printf"%4d %s\n",NR,$0}' test.c
nawk '/include/{print}' test.c
nawk 'length($0) > 20 {print}' test.c
find . -name "*.c" -print | nawk 'BEGIN {FS="/"} {print $NF}' find . -name "*.c" -print | nawk -F / '{print $NF}'
nawk ' {line[NR] = $0}\ END {for (i=NR; i>0; i--) print line[i]}' test.c
nawk 'BEGIN {s = 0}\ {s = s + length($0)}\ END {print s/NR}' test.c
BEGIN {s = 0} {s = s + length($0)} END {print s/NR}
nawk -f temp test.c
nawk '{print $'$2', $'$1'}'
菅沼ホーム | 本文目次 | 演習問題解答例 | 付録目次 | 索引 |