Go to main content
マニュアルページ セク ション 1: ユー ザーコマンド

印刷ビューの終了

更新: 2016年12月6日
 
 

awk(1)

名前

awk - パターン走査およびパターン処理の言語

形式

/usr/bin/awk [-f progfile] [-Fc] [' prog '] [parameters] [filename]...
/usr/xpg4/bin/awk [-FcERE] [-v assignment]... 'program' -f progfile... [argument]...

説明

/usr/xpg4/bin/awk ユーティリティーについては nawk(1) のマニュアルページで説明しています。

/usr/bin/awk ユーティリティーは、filename で指定したファイルを走査し、prog で指定したパターンのいずれかと一致する行を探します。prog 文字列は、シェルと区別できるように単一引用符 ( ´) で囲みます。prog で示される各パターンとともに、filename 内に一致する行が見つかったときに実行されるアクションを記述することができます。一連のパターン-アクション文は prog に直接書いても良く、–f progfile オプションで示されるファイル内に指定してもかまいません。ファイルは順番に読み込まれます。ファイルが指定されないときは、標準入力が使用されます。ファイル名 '-' は標準入力を意味します。

オプション

サポートしているオプションは、次のとおりです。

–f progfile

awkprogfile から読み込んだ一連のパターンを使用します。

–Fc

フィールドセパレータ (FS) として c を使用します。下記の FS の説明を参照してください。

使用法

入力行

各行は、各パターン-アクション文のパターン部分と比較されます。一致すると、関連するアクションが実行されます。var=value の形式の filename はファイル名ではなく変数の割り当てとみなされ、その場合には、そのファイルがオープンされるであろう時点で行われます。この方法によって割り当てられた変数は BEGIN ルール内では使用できず、以前に指定されたファイルがすべて読み込まれた後で割り当てられます。

入力行は通常、スペースで区切られたフィールドで構成されています。(このデフォルト値は FS 組み込み変数または –Fc オプションを使用して変更できます)。デフォルトでは先行する空白文字を無視し、空白文字またはタブ、あるいはその両方でフィールドを区切るようになっています。ただし、変数 FS にスペースを含まない値が代入されていると、先行スペースを無視しません。フィールドは $1$2 のように表されます。 . . ; $0 は全行を意味します。

パターン-アクション文

パターン-アクション文は次の形式をとります。

pattern { action }

パターンかアクションのどちらかを省略することができます。アクションが指定されていないときは、一致した行を印刷します。パターンが指定されていないときは、全行に対してアクションが実行されます。パターン-アクション文は復帰改行またはセミコロンで区切られます。

パターンは、正規表現および関係式を任意の論理演算子 (!、||、&&、および括弧) によって組み合わせたものです。関係式は、次のいずれかです。

expression relop expression
expression matchop regular_expression

ここで、relop とは C 言語の 6 つの関係演算子のうちのどれかで、matchop とは ~ (含む) または !~ (含まない) のいずれかを示します。expression は、数値演算式、関係演算式、特殊式、

var in array

またはこれらを論理演算で組み合わせたものです。

egrep(1) と同様、正規表現はスラッシュで囲まれていなければなりません。パターン内の独立した正規表現はその行すべてに適用されます。正規表現は関係式の中にも現われます。パターンは、コンマで区切られた 2 つのパターンからなることもあります。この場合、関連するアクションは、最初のパターンが一致した行と 2 番目のパターンが一致した行の間にあるすべての行に対して実行されます。

BEGINEND は特殊なパターンで、最初の入力行を読む前と最後の入力行を読んだ後に制御を確保するのに使用します。この 2 つの特殊パターンは他のパターンと組み合わせて使うことはできません。

組み込み変数

組み込み変数には次のものがあります。

FILENAME

現入力ファイル名

FS

入力フィールドセパレータの正規表現 (デフォルトは空白文字とタブ)

NF

現レコード中のフィールド数

NR

現レコード番号

OFMT

数値の出力形式 (デフォルトは %.6g)

OFS

出力フィールドセパレータ (デフォルトは空白文字)

ORS

出力レコードセパレータ (デフォルトは復帰改行文字)

RS

入力レコードセパレータ (デフォルトは復帰改行文字)

アクションは一連の文です。使用できる文は次のうちのいずれかです。

if ( expression ) statement [ else statement ]
while ( expression ) statement 
do statement while ( expression )
for ( expression ; expression ; expression ) statement
for ( var in array ) statement 
break
continue
{ [ statement ] . . . }
expression      # commonly variable = expression
print [ expression-list ] [ >expression ]
printf format [ ,expression-list ] [ >expression ]
next            # skip remaining patterns on this input line
exit [expr]     # skip the rest of the input; exit status is expr

文は、セミコロン、復帰改行、右括弧のうちのいずれかで終了します。式のリストが空の場合は入力行全体を意味します。式は、文字列または数字と +-*/%^、および連結 (空白文字で示される) の各演算子で構成されます。演算子 ++--+=-=*=/=%= ^=>>=<<===!=?: も式の中に記述できます。変数は、スカラー、配列要素 (x[i] で表される) またはフィールドです。変数は NULL 文字列またはゼロで初期化されます。配列の添字は、必ずしも数字である必要はなく、文字列でもかまいません。これによって、ある種の連想記憶形式を使用できます。文字列定数は、二重引用符 ("") で囲みます。C のエスケープ文字はエスケープとして認識します。

print 文はその引数を標準出力に出力します。>expression が指定されたときはファイルへ、|cmd が指定されたときはパイプへ出力します。出力は、現在の出力フィールドセパレータで区切られた各引数を持つ、出力レコードセパレータで終了します。printf 文は、その書式に従って式のリストの書式を定めます (printf(3C) 参照)。

組み込み関数

演算関数は次のとおりです。

cos(x)

x をラジアン単位とし、x の余弦を返します。(/usr/xpg4/bin/awk のみ。nawk(1) を参照)。

sin(x)

x をラジアン単位とし、x の正弦を返します。(/usr/xpg4/bin/awk のみ。nawk(1) を参照)。

exp(x)

x の指数関数を返します。

log(x)

x の自然対数を返します。

sqrt(x)

x の平方根を返します。

int(x)

引数を切り捨てて、整数にします。つまり x 0 よりも大きい場合は、0 に向かって切り捨てます。

文字列関数は次のとおりです。

index(s , t)

文字列 s の中で 文字列 t が最初に出現する位置を返します。出現しなければ 0 を返します。

int(s)

整数値になるよう、s を切り捨てます。s が指定されていなければ、$0 が使われます。

length(s)

引数を文字列として解釈しその長さを返します。引数がない場合は行全体の長さを返します。

split(s, a, fs)

文字列 sa[1]、 a[2]、 . . .a[n] の配列要素に分割し、値 n を返します。この分割は、正規表現 fs によって行われ、fs が指定されていない場合はフィールドセパレータ FS によって行われます。

sprintf(fmt, expr, expr, . . . )

fmt で指定した printf(3C) 形式に従って式の書式を定め、その結果得られた文字列を返します。

substr(s, m, n)

文字列 s 内の m 番目から始まる長さ n の部分文字列を返します。

出入力用の関数は次のとおりです。

getline

$0 に、現入力ファイルの次の入力レコードを設定します。getline は正常終了時には 1 を、ファイルの終わりに達すると 0 を、またエラー発生時には -1 を返します。

大規模ファイルの動作

ファイルが 2G バイト(231 バイト) 以上ある場合の awk の動作については、largefile(5) を参照してください。

使用例 1 72 文字以上の行の出力

次の例は、awk -f examplescript の形式のコマンドで実行可能な awk スクリプトです。このスクリプトは、72 文字を超える行を出力します。

length > 72
使用例 2 フィールドの逆順出力

次の例は、awk -f examplescript の形式のコマンドで実行可能な awk スクリプトです。このスクリプトは、最初の 2 フィールドを逆順に出力します。

{ print $2, $1 }
使用例 3 入力フィールドを区切った、フィールドの逆順出力

次の例は、awk -f examplescript の形式のコマンドで実行可能な awk スクリプトです。このスクリプトは、最初の 2 つの入力フィールドをコンマ、空白文字、またはタブで区切って逆順出力します。

BEGIN { FS = ",[ \t]*|[ \t]+" }
      { print $2, $1 }

この例は、/usr/xpg4/bin/awk でのみ有効です。

使用例 4 最初のカラムを合計して、合計値と平均値の出力

次の例は、awk -f examplescript の形式のコマンドで実行可能な awk スクリプトです。このスクリプトは、最初のカラムを合計して、合計値と平均値を出力します。

{ s += $1 }
END  { print "sum is", s, " average is", s/NR }
使用例 5 フィールドの逆順出力

次の例は、awk -f examplescript の形式のコマンドで実行可能な awk スクリプトです。このスクリプトは、フィールドを逆順に出力します。

{ for (i = NF; i > 0; −−i) print $i }
使用例 6 start/stop の間にあるすべての行の出力

次の例は、awk -f examplescript の形式のコマンドで実行可能な awk スクリプトです。このスクリプトは、start/stop の間にあるすべての行を出力します。

/start/, /stop/
使用例 7 最初のフィールドが前行と異なるすべての行の出力

次の例は、awk -f examplescript の形式のコマンドで実行可能な awk スクリプトです。このスクリプトは、最初のフィールドが前行と異なるすべての行を出力します。

$1 != prev { print; prev = $1 }
使用例 8 ページ番号付きでのファイルの出力

次の例は、awk -f examplescript の形式のコマンドで実行可能な awk スクリプトです。このスクリプトは、ページ番号付きで 5 ページからファイルを出力します。

/Page/	{ $2 = n++; }
     	   { print }
使用例 9 指定した数値から始まるページ番号でファイルを出力

このプログラムが prog のファイルに記録されている場合、次のコマンドは 5 ページから始まるページ番号で input ファイルを出力します。

example% awk -f prog n=5 input

環境変数

awk の実行に影響を与える次の環境変数についての詳細は、environ(5) を参照してください。LANG、LC_ALL 、LC_COLLATE、LC_CTYPE、LC_MESSAGES、NLSPATH、および PATH。

LC_NUMERIC

数値入力の解釈、数値と文字列との変換、数値出力のフォーマットに用いる、小数点文字を決定します。awk プログラム (コマンド行引数で指定される代入も含む) の処理で認識される小数点文字は、ロケールに関係なくピリオド (POSIX ロケールの小数点文字) です。

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

/usr/bin/awk

属性タイプ
属性値
使用条件
system/core-os
CSI
未対応

/usr/xpg4/bin/awk

属性タイプ
属性値
使用条件
system/xopen/xcu4
CSI
有効
インタフェースの安定性
確実
標準
standards(5) を参照してください。

関連項目

egrep(1), grep(1), nawk(1), sed(1), printf(3C), attributes(5), environ(5), largefile(5), standards(5)

入力行にスペースが含まれる場合、出力時に保証されません。

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