日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
AWK(1) FreeBSD 一般コマンドマニュアル AWK(1) 名称 awk -- パターン指向のスキャンと処理言語 書式 awk [-safe] [-V] [-d[n]] [-F fs] [-v var=value] [prog | -f progfile] file ... 解説 awk は、prog または -f progfile として指定された 1 つ以上のファイルで逐語 的に指定されたパターンの組のいずれかと一致する行に対しで各入力 file をス キャンします。各パターンにおいて、file の行がパターンと一致するとき、実行 される関連したアクションを指定することができます。各行は、すべてのパター ンのアクション文のパターン部分と比較されます。関連するアクションは、一致 しているパターンごとに実行されます。ファイル名 `-' は、標準入力を意味しま す。形式 var=value のあらゆる file は、ファイル名ではなく、代入として扱わ れ、それがファイル名であったなら、それがオープンされた時点に実行されま す。 オプションは、次の通りです: -d[n] デバッグモード。デバッグレベルを n に設定するか、n が指定されない なら、1 に設定します。1 より大きな値によって、awk は、致命的エ ラーでコアダンプします。 -F fs 正規表現 fs である入力フィールドのセパレータを定義します。 -f progfile コマンド行の代わりに指定されたファイル progfile からプログラム コードを読み込みます。 -safe ファイルの出力 (print >, print >>) プロセスの作成 (cmd | getline, print |, system) を無効にし、環境変数にアクセスします (ENVIRON; 下記の変数のセクションを参照)。これは、最初の (そして、あまり信頼 できない) awk の ``safe'' (安全な) バージョンの近似です。 -V 標準出力に awk のバージョン番号を印刷 (表示) し、終了します。 -v var=value prog が実行される前に、value を変数 var に代入します。-v オプショ ンは、何度も与えることができます。 入力は、通常、改行によって、または RS の値によって分離された入力行 (records) (レコード) によって構成されています。RS がヌルであるなら、あら ゆる空白行は、レコードのセパレータとして使用され、改行は、(FS の値に加え て) フィールドセパレータとして使用されます。これは、複数行のレコードで動 作するとき、便利です。 入力行は、通常、空白類、または正規表現 FS によって分離されるフィールドで 構成されます。フィールドは、$1, $2, ..., で表され、一方 $0 は、全体の行を 参照します。FS がヌルであるなら、入力行は、1 文字ごとに 1 つのフィールド に分けられます。 通常、いくつかの空白は、フィールドを分離します。フィールドのセパレータを 単一の空白に設定するために、`[ ]' の値で -F オプションを使用します。`t' のフィールドセパレータが指定されるなら、awk は、あたかも `\t' がが指定さ れ、フィールドセパレータとして <TAB> を使用するかのように扱います。フィー ルドセパレータとしてリテラル `t' を使用するために、`[t]' の値で -F オプ ションを使用します。 パターン-アクション文は、次の形式があります。 pattern { action } { action } が不足することは、行を印刷 (表示) します。パターンが不足するこ とは、常に一致します。パターン-アクション文は、改行またはセミコロンによっ て分離されます。 終了文または、コンマ (`,'), 開き大括弧 (`{'), 論理的な AND (`&&'), 論理的 な OR (`||') に続いて、`do' または `else' キーワードの後に、または `if', `for' または `while' 文の閉じ大括弧の後に、改行が許可されます。さらに、 トークンの間の改行をエスケープするために、バックスラッシュ (`\') を使用す ることができます。 アクションは、一連の文です。文は、次の 1 つを指定することができます: if (式) 文 [else 文] while (式) 文 for (式; 式; 式) 文 for (var in array) 文 do 文 while (式) break continue { [文 ...] } 式 # 通常 var = 式 print [式の-リスト] [>式] printf format [..., 式-リスト] [>式] return [式] next # この入力行で残りのパターンをスキップします nextfile # このファイルの残りをスキップし, 次をオープンし, 先頭で開 始します delete array[expression] # 配列の要素を削除します delete array # 配列のすべての要素を削除します exit [式] # 直ちに終了します; 状態は, 式です 文は、セミコロン、改行または右大括弧によって終わります。空の式-リスト $0 を表します。文字列定数は、中で認識される、通常の C エスケープで "" で引用 されます (これらの完全なリストについては、printf(1) を参照)。式は、適切な 文字列または数値を取り、演算子 + - * / % ^ (べき乗) と (空白類によって示 される) 連結を使用して構築されます。また、演算子 ! ++ -- += -= *= /= %= ^= > >= < <= == != ?: も式で利用可能です。変数は、スカラ、(x[i] で示され る) 配列要素またはフィールドです。変数は、ヌル文字列に初期化されます。配 列の添字は、必ずしも数値でなく、あらゆる文字列でもかまいません。これは、 連想記憶のやり方を可能にします。[i,j,k] のような複数の添字が許可されま す。構成要素は、連結され、SUBSEP (下記の変数のセクションを参照) の値に よって分離されます。 print は、その引数を、現在の出力フィールドセパレータによって分離されて、 出力レコードセパレータによって終了する、標準出力 (か、または >file または >>file が与えられるなら、ファイルに、または | cmd が与えられるなら、パイ プに) 印刷 (表示) します。file cmd は、リテラルの名前または括弧で囲まれた 式を指定できます。異なった文の同一の文字列値は、同じオープンしているファ イルを示します。printf 文は、書式にしたがってその式のリストを書式化します (printf(1) を参照)。 パターンは、正規表現と関係式の (! || && などの) 任意のブール値の組み合わ せです。awk は、拡張された正規表現 (ERE) をサポートします。正規表現に関す る詳細については、re_format(7) を参照してください。パターンの孤立された (isolated) 正規表現は、全体の行に適用します。また、正規表現は、演算子 ~ と !~ を使用して、関係式に現れます。/re/ は、不変の正規表現です。あらゆる 文字列 (定数または変数) は、パターンの孤立された (isolated) 正規表現の位 置を除いて、正規表現として使用されます。 パターンは、コンマによって区切られた 2 つのパターンから成ります。この場合 に、アクションは、最初のパターンの発生から 2 番目の発生を通してすべての行 に対して実行されます。 関係式は、次の 1 つです: 式 matchop 正規表現 式 relop 式 式 in 配列名 (expr, expr, ...) in 配列名 ここで、relop は、C の 6 つの関係演算子のいずれかで、matchop は、~ (一致 する) または !~ (一致しない) のいずれかです。条件文は、演算式、関係式、ま たはこれらのブール値の組み合わせです。 特別なパターン BEGIN と END は、最初の入力行が読み込まれる前で、最後が読 み込まれた後に制御を捕獲するために使用されます。BEGIN と END は、他のパ ターンと組み合わせられません。 特別な意味がある変数名は、次の通りです: ARGC 引数のカウント、代入可能です。 ARGV 引数の配列、代入可能です。ヌルでないメンバは、ファイル名と見な されます。 CONVFMT 数値を変換するときの変換書式 (デフォルトは、"%.6g" です)。 ENVIRON 環境変数の配列。添字は、名前です。 FILENAME 現在の入力ファイルの名前。 FNR 現在のファイルの現在のレコードの序数。 FS フィールドを分離するために使用される正規表現。また、オプション -F fs によって設定可能です。 NF 現在のレコードのフィールドの数。現在のレコードの最後のフィール ドの値を取得するために、$NF を使用することができます。 NR 現在のレコードの序数。 OFMT 数値のための出力書式 (デフォルトは、"%.6g" です)。 OFS 出力フィールドのセパレータ (デフォルトは、空白)。 ORS 出力レコードのセパレータ (デフォルトは、改行)。 RLENGTH match() 関数によって一致している文字列の長さ。 RS 入力レコードのセパレータ (デフォルトは、改行)。 RSTART match() 関数によって一致している文字列の開始位置。 SUBSEP 複数の添字を分離します (デフォルトは、034)。 関数 awk 言語には、次のさまざまな組み込み関数があります: 計算、文字列、入力/出 力、一般的とビット操作。 関数は、次のように (パターン-アクション文の位置で) 定義されます: function foo(a, b, c) { ...; return x } パラメータは、スカラであるなら、値で、配列名であるなら、参照で渡されま す。関数は、再帰的に呼び出すことができます。パラメータは、関数にローカル です。すべての他の変数は、グローバルです。したがって、ローカル変数は、関 数定義の余分なパラメータを提供することによって作成されます。 算術関数 atan2(y, x) ラジアンで y/x の逆正接を返します。 cos(x) x の余弦 (コサイン) を返します、ここで、x は、ラジアンで測定 されます。 exp(x) の指数を返します。 int(x) 整数値に切り詰められた x を返します。 log(x) x の自然対数を返します。 rand() 0<=n<1. である、乱数 n を返します。 sin(x) x の正弦を返します、ここで x は、ラジアンで測定されます。 sqrt(x) x の立方根を返します。 srand(expr) expr への rand() のためのシード (種) を設定し、前のシード (種) を返します。expr が省略されるなら、代わりに、時刻が使用 されます。 文字列機関数 gsub(r, t, s) 正規表現のすべての発生が置き換えられることを除いて、 sub() と同じです。gsub() は、置換の数を返します。 index(s, t) 文字列 t が現れる s の位置を返すか、またはそれがないな ら、0 を返します。 length(s) 文字列として取られる s の長さを返すか、または引数が与え られないなら、$0 の長さが返されます。 match(s, r) 正規表現 r が現れる s の位置を返すか、またはそれが見つか らないなら、0 を返します。変数 RSTART は、(返される値と 同じである) 一致する文字列の位置に設定されるか、または一 致が見つからないなら、0 に設定されます。変数 RLENGTH は、一致する文字列の長さに設定されるか、または一致が見つ からないなら、-1 に設定されます。 split(s, a, fs) 文字列 s を配列要素 a[1], a[2], ..., a[n] に分割し、n を 返します。分割は、正規表現 fs または fs が与えられないな ら、フィールドセパレータ FS で行われます。フィールドセパ レータとして空の文字列は、文字列を 1 文字ごとに 1 つの配 列要素に分割します。 sprintf(fmt, expr, ...) printf(1) の書式 fmt にしたがって expr, ... を書式化した 結果の文字列。 sub(r, t, s) 文字列 s 中の最初に現れた正規表現 r を t に置換します。s が与えられないなら、$0 が使用されます。t のアンパサンド (`&') は、正規表現 r で文字列 s に置き換えられます。それ に先行する 2 つのバックスラッシュ (`\\') でリテラルのア ンパサンドを指定することができます。それに先行する別の バックスラッシュ (`\\') でリテラルのバックスラッシュを指 定することができます。sub() は、置換の数を返します。 substr(s, m, n) 多くても、1 からカウントされる位置 m で始まる s の n 文 字の部分文字列を返します。n が省略されるなら、または n が文字列の残りより多い文字を指定するなら、部分文字列の長 さは、s の長さによって制限されます。 tolower(str) str のすべての大文字を対応する同等の小文字に変換し、その コピーを返します。 toupper(str) str のすべての小文字を対応する同等の大文字に変換し、その コピーを返します。 入力/出力と一般的な関数 close(expr) ファイルまたはパイプの expr をクローズします。expr は、ファイルまたはパイプをオープンするために使用さ れる文字列と一致するべきです。 cmd | getline [var] cmd の出力からパイプ化されたストリームの入力のレ コードを読み込みます。var が省略されるなら、変数 $0 と NF が設定されます。そうでなければ、var が、設定 されます。ストリームがオープンされていないなら、そ れは、オープンされます。ストリームがオープンされ続 けている限り、その後の呼び出しは、ストリームからそ の後のレコードを読み込みます。ストリームは、close() への呼び出しで明示的にクローズされるまで、オープン され続けます。getline は、成功した入力に対して 1 を 返し、ファイルの終りに対して 0 を返し、エラーに対し て -1 を返します。 fflush([expr]) ファイルまたはパイプ expr のためのバッファリングさ れた出力をフラッシュするか、または expr が省略され るなら、すべてのオープンしているファイルまたはパイ プをフラッシュします。expr は、ファイルまたはパイプ をオープンするために使用される文字列と一致するべき です。 getline 現在の入力ファイルから次の入力レコードを $0 に設定 します。getline のこの形式は、変数 NF, NR と FNR を 設定します。getline は、成功した入力に対して 1 を返 し、ファイルの終りに対して 0 を返し、エラーに対して -1 を返します。 getline var $0 を変数 var に設定します。getline のこの形式は、 変数 NR と FNR を設定します。getline は、成功した入 力に対して 1 を返し、ファイルの終りに対して 0 を返 し、エラーに対して -1 を返します。 getline [var] <file file から次のレコードを $0 に設定します。var が省略 されるなら、変数 $0 と NF が設定されます。そうでな ければ、var が、設定されます。file ファイルがオープ ンされていないなら、それは、オープンされます。スト リームがオープンされ続けている限り、その後の呼び出 しは、file からその後のレコードを読み込みます。file は、close() への呼び出しで明示的にクローズされるま で、オープンされ続けます。 system(cmd) cmd を実行し、その終了ステータスを返します。 ビット操作関数 compl(x) 整数引数 x のビット単位の補集合 (complement) を返します。 and(x, y) 整数引数 x と y でビット単位論理和 (AND) を実行します。 or(x, y) 整数引数 x と y でビット単位論理和 (OR) を実行します。 xor(x, y) 整数引数 x と y でビット単位の排他的論理和を実行します。 lshift(x, n) 左に n ビットシフトされた整数引数 x を返します。 rshift(x, n) 右に n ビットシフトされた整数引数 x を返します。 終了ステータス ユーティリティ awk は、成功すると 0 で、エラーがあった場合は >0 で終了し ます。 しかし、exit 式は、終了ステータスを修正することができることに注意してくだ さい。 使用例 72 文字より長い行を印刷 (表示) します: length($0) > 72 逆の順序で最初の 2 つのフィールドを印刷 (表示) します: { print $2, $1 } 同様に、コンマおよび空白とタブによって区切られる入力フィールドを印刷 (表 示) します: BEGIN { FS = ",[ \t]*|[ \t]+" } { print $2, $1 } 最初のカラムを加算し、合計と平均を印刷 (表示) します: { s += $1 } END { print "sum is", s, " average is", s/NR } start と stop の間のすべての行を印刷 (表示) します: /start/, /stop/ echo(1) をシミュレーションします: BEGIN { # Simulate echo(1) for (i = 1; i < ARGC; i++) printf "%s ", ARGV[i] printf "\n" exit } 標準エラーにエラーメッセージを印刷 (表示) します: { print "error!" > "/dev/stderr" } 関連項目 cut(1), lex(1), printf(1), sed(1), re_format(7), script(7) A. V. Aho, B. W. Kernighan, and P. J. Weinberger, The AWK Programming Language, Addison-Wesley, 1988, ISBN 0-201-07981-X. 規格 awk ユーティリティは、awk が {n,m} パターン照合をサポートしないことを除い て、IEEE Std 1003.1-2008 (``POSIX.1'') 仕様に準拠しています。 コマンド fflush, compl, and, or, xor, lshift, rshift と同様にフラグ [-dV] と [-safe] は、その仕様の拡張です。 歴史 awk ユーティリティは、Version 7 AT&T UNIX で登場しました。 バグ 数値と文字列の間に明示的な変換はありません。式を強制的に数値として扱うた めには、それに 0 を足します。強制的に文字列として扱うためには、それに "" を連結 (concatenate) します。 関数の変数のためのスコープ規則は、ひどいものです。構文は、もっと悪くなっ ています。 FreeBSD 11.4 July 8, 2020 FreeBSD 11.4