AWK(1)                  ユーザ・コマンド                  AWK(1)



【名前】
     awk - パターン走査および処理用言語

【形式】
     awk [ -f program-file ] [ -Fc ] [ program ]
          [ variable =value ... ] [ filename...]

【国際機能】
     EUC 主コードセット文字に加えて補助コードセットの文字が使えま
     す。

     すべての処理はバイト単位ではなく、文字を単位として処理されま
     す。例えば以下の組み込み関数もすべて文字単位で処理されます。

     組み込み関数 length(s) は、文字列 s の文字数を返します。

     組み込み関数 substr(s, m, n) の引数 m と n は文字を単位と し
     ます。

  [環境]
     環境変数 LC_CTYPE, LANG は、 awk の文字分類を制御 し ま す。
     awk  を 起動すると、これらの環境変数は LC_CTYPE, LANG の順に
     チェックされます。有効な値が検出されると、文字分類の残りの環
     境 変 数 は 無 視されます。たとえば、LANG を新しく設定しても
     LC_CTYPE の現在有効な文字分類に上書きすることはありませ ん。
     有 効 な値がない場合、シェルの文字分類はデフォルトで POSIX.1
     の C の locale に設定されます。

【機能説明】
     awk は、各入力ファイルを走査して、 program で指定したパ ター
     ン集合と一致する行を探します。入力ファイルは指定された順に読
     み取られます。ファイルの指定がない場合は、標準入力が読み取ら
     れます。ファイル名 `-' は、標準入力を意味します。

     パターン集合は program として文字通り指定するこ と も、  `-f
     program-file' を使用して、指定されるファイルに入れておくこと
     もできます。 program-file の `-' は、標準入力を示 し ま す。
     program 文字列をコマンド行に指定するときは、シェルによって処
     理されないように、単一引用符 (')で囲まなければなりません。

     variable = value の形式の引数を使って awk 変数をコマンド行に
     指定することができます。次の filename 引数の最初のレコードを
     読み込む前に awk 変数 variable が value に設定されます。

     program の各パターンには、 filename の行がパターンに一致した
     と き に行うアクションを指定することができます。入力行と awk
     言語の形式については下記の説明を参照してください。各入力ファ
     イルの各行は、パターンとアクションを指定した文のパターンの部
     分と比較されます。一致したパターンごとに、指定したアクション
     が行われます。

【オプション】
     -f program-file
          program-file の内容を program のソースとして使 用 し ま
          す。

     -Fc  文字 c をフィールド区切り(FS)文字として使用します。下
          記の FS を参照してください。

【使用法】
  [入力行]
     入力行は、空白で区切られたフィールドからなります。空白以外を
     区切り文字として使いたい時は FS を使用して変更できます。下記
     「特殊変数名」を参照してください。フィールドは $1, $2,... の
     ように表記します。 $0 は、行全体を意味します。

  [パターン−アクション文]
     パターンとアクションを指定する文の形式は次のとおりです。
          パターン { アクション }
     アクションを指定しない場合は、その行を出力にコピーします。パ
     ターンを指定しない場合は、いつでも一致することになります。

  [アクション文]
     アクションは、文の並びです。文は、次のいずれかとすることがで
     きます。

          if ( 条件 ) 文 [ else 文 ]
          while ( 条件 ) 文
          for ( 式 ; 条件 ; 式 ) 文
          break
          continue
          { [ 文 ] ...}
          変数 = 式
          print [ 式リスト ] [ > 式 ]
          Sprintf 書式 [ , 式リスト ] [ > 式 ]
          next                この入力行の残りのパターンをス キッ
                              プする。
          exit                入力の残りをスキップする。

  [awk 言語の形式]
     文は、セミコロン、復帰改行、または右中かっこ(})で終わり ま
     す。空の 式リストは、行全体を意味します。

     式は、文字列または数値が使え、演算子 +, -, *, /, % と連結 記
     号 (空 白 で表示)を組み合わせて表現します。 C 言語の演算子
     ++, --, +=, -=, *=, /=, %= も使用できます。

     変数は、スカラ、配列要素(x[i] と表記)、フィールドのうち の
     何 れ かです。変数は空の文字列に初期化されます。配列の添え字
     は、文字列とすることができ、必ずしも数字でなくても構い ま せ
     ん。これによって連想メモリの形式をとることができます。文字列
     定数は二重引用符(")で囲みます。

     print 文は、引数を現在の出力フィールド分離文字で区切って、出
     力レコード分離文字で終了させて、標準出力( >式がある場合は、
     指定ファイル)に出力します。 printf 文は、書式にしたがって、
     式 のリストを編集します(制御文字の書式についてはprintf(3V)
     参照)。

  [組み込み関数]
     組み込み関数 length は、引数を文字列とみなしてその文字列内の
     文字数を返します。引数がない場合には、行全体を対象とします。
     また、組み込み関数には exp, log, sqrt, と int があり ま す。
     int  は 引数小数点以下を切り捨てて整数とします。 `substr( s,
     m, n )' は、文字列 s の文字位置 m から始まる n 文字の部分 文
     字 列 を返します。関数 `sprintf (format, expression, expres-
     sion, ...) は、 format で指定した printf と同じ書式 に し た
     がって、式 expression を編集し、結果として得られる文字列を返
     します。

  [パターン]
     パターンは、正規表現と関係式の (!, ||, &&, およびかっこ)の
     任 意 の 論 理結合です。正規表現は、スラッシュで囲み、構文は
     egrep の場合と同じです(grep(1V)参照)。パターン内の独立した
     正規表現は、行全体に適用されます。また、正規表現を関係式に入
     れることもできます。

     コンマで区切った 2 つのパターンを 1 つのパターンとすることも
     できます。この場合、アクションは最初のパターンと次のパターン
     の間のすべての行について行われます。

     関係式は、下記のいずれかとします。
          式 matchop 正規表現
          式 relop 式

     ここで relop は C 言語の 6 種類の関係演算子 の い ず れ か、
     matchop  は、 ~ (包含する)または !~ (包含しない)のいずれ
     かです。条件は、数式、関係式またはこれらの論理結合です。

     特別なパターン BEGIN を使用して、最初の入力行の読み 取 り 前
     に、 処理を制御することができます。 BEGIN は必ず最初のパター
     ンとします。特別なパターン END を使用して、最後の行の読み 取
     り 後に、処理を制御することができます。 END は最後のパターン
     でなければなりません。

  [特殊変数名]
     プログラムを次のように開始した場合、文字 c を使用して フィー
     ルドを区切ることができます。

             BEGIN { FS = "c" }

     あるいは、 -Fc オプションを使用しても同じことができます。

     特別な意味を持つ他の変数としては、現在のレコードのフィールド
     数  NF、 現 在 の レ コー ド の番号 NR、現在の入力ファイル名
     FILENAME、出力フィールドの分離文字 OFS (省略 時 は ブ ラ ン
     ク)、 出力レコードの分離文字 ORS (省略時は復帰改行)、数値
     出力の書式 OFMT (省略時は %.6g)があります。

【ファイル】
     /usr/lib/locale/locale_name/LC_CTYPE

【環境変数】
     LC_CTYPE
     LANG

【使用例】
          length > 72
     は 72 文字よりも長い行を出力します。

          { print $2, $1 }
     は各行の最初の 2 つのフィールドを逆順に出力します。

          { s += $1 }
          END      { print "sum is", s, " average is", s/NR }
     は各行の最初のカラムを加算して、その和と平均を出力します。

          { for (i = NF; i > 0; --i) print $i }
     は全フィールドを逆順に出力します。

          /start/, /stop/
     はパターン start と stop の間の全行を出力します。

          $1 != prev { print; prev = $1 }
     は最初のフィールドが前の行の最初のフィールドと異なっているす
     べての行を出力します。

【関連項目】
    grep(1V),lex(1),sed(1V),printf(3V)

     Editing Text Files

     A. V. Aho, B. W. Kerninghan, P. J. Weinberger, The AWK  Pro-
     gramming Language Addison-Wesley, 1988.

【注意事項】
     awk コマンドは、8 ビットのシンボル名をサポートしません。これ
     は  awk ソース・コードのシステム間における移植性を損なわない
     ためです。

【使用上の留意点】
     入力中の空白は、フィールドが対象となっているとき、出力上には
     保持されません。

     数値と文字列の間には明示的な変換は行われません。式を数値とし
     て 認識させるには、式に 0 を加えてください。文字列と認識させ
     る場合は、式に空の文字列("")を連結させてください。

     二重引用符を出力するエスケープ・シーケンスはありません。ただ
     し、sprintf(printf(3V)参照)を使用して、文字の ASCII シーケ
     ンスと変数に格納することができます。

          dq = sprintf("%c", 34)

     構文エラーが発生するとメッセージ `awk: bailing out near line
     1' が出力されます。

     awk に与えるファイルの一行の長さが 1024 文字以上の場合、動作
     を保証しません。また、 awk に与える正規表現の長さが 256 文字
     以上の場合にも動作を保証しません。