Manpages

名 称

gawk − パ タ ー ン 検 索 ・ 処 理 言 語

書 式

awk [ POSIX or GNU style options ] −f program-file [ −− ] file ...
gawk
[ POSIX or GNU style options ] [ −− ] program-text file ...

解 説

gawkGNU プ ロ ジ ェ ク ト が 実 装 し た プ ロ グ ラ ミ ン グ 言 語 AWK の 処 理 系 で す 。 本 処 理 系 は POSIX 1003.2 コ マ ン ド 言 語 と ユ ー テ ィ リ テ ィ 規 約 に 定 め ら れ た 言 語 の 定 義 に 適 合 し て い ま す 。 本 バ ー ジ ョ ン は ま た 、 Aho, Kernighan, Weinberger の 著 書 The AWK Programming Language の 記 述 に も と づ い て お り 、 System V Release 4 UNIXawk の 付 加 機 能 も 含 ん で い ま す 。 gawk は ま た 、 Bell Labs の 新 機 能 お よ び GNU 独 自 の 拡 張 も 提 供 し ま す 。 コ マ ン ド ラ イ ン は 、 gawk へ の オ プ シ ョ ン 、 (も し −f ま た は −−file オ プ シ ョ ン に よ り 指 定 さ れ て い な け れ ば ) AWK の プ ロ グ ラ ム テ キ ス ト 、 そ し て 残 り の 引 数 列 か ら な り ま す 。 こ の 残 り の 引 数 列 は 、 定 義 済 み AWK 変 数 ARGC, ARGV を 用 い る こ と で 参 照 で き ま す 。

オ プ シ ョ ン フ ォ ー マ ッ ト

gawk へ の オ プ シ ョ ン は 、 伝 統 的 な POSIX 形 式 の 1 文 字 オ プ シ ョ ン と 、 GNU 形 式 の ロ ン グ オ プ シ ョ ン が あ り ま す 。 POSIX 形 式 の オ プ シ ョ ン は 単 一 の “−” で 始 ま り 、 一 方 GNU 形 式 の も の は “−−” で 始 ま り ま す 。 ロ ン グ オ プ シ ョ ン は GNU の 独 自 仕 様 と POSIX の 必 須 仕 様 の 両 方 に つ い て 用 意 さ れ て い ま す 。

POSIX 標 準 に 従 い 、 gawk 独 自 仕 様 の オ プ シ ョ ン は −W オ プ シ ョ ン へ の 引 数 で 与 え ま す 。 複 数 の −W オ プ シ ョ ン を 指 定 す る こ と も で き ま す 。 後 述 の よ う に 、 各 −W オ プ シ ョ ン に は 、 そ れ に 対 応 す る ロ ン グ オ プ シ ョ ン が 存 在 し ま す 。 ロ ン グ オ プ シ ョ ン へ の 引 数 は 、 空 白 を 入 れ ず に = で つ な い で 指 定 す る か 、 そ の 次 の コ マ ン ド ラ イ ン 引 数 と し て 渡 す こ と が で き ま す 。 ロ ン グ オ プ シ ョ ン は 、 短 縮 形 が 一 意 で あ る 限 り 、 短 縮 す る こ と が で き ま す 。

オ プ シ ョ ン

gawk は 以 下 の オ プ シ ョ ン を 受 け 付 け ま す 。

−F fs

−−field-separator fs 入 力 フ ィ ー ル ド セ パ レ ー タ (変 数 FS の 値 )を fs と し ま す 。
−v
var=val
−−assign
var=val プ ロ グ ラ ム を 実 行 す る 前 に 、 変 数 var に 値 val を 設 定 し ま す 。 こ の よ う に し て 設 定 し た 変 数 は 、 AWK プ ロ グ ラ ム の BEGIN ブ ロ ッ ク 内 で も 参 照 で き ま す 。
−f
program-file
−−file
program-file

awk へ の 第 1 引 数 を 用 い る か わ り に 、 AWK プ ロ グ ラ ム を フ ァ イ ル program-file か ら 読 み 込 み ま す 。 −f (ま た は −−file ) オ プ シ ョ ン は 複 数 回 使 用 す る こ と が で き ま す 。

−mf NNN
−mr
NNN さ ま ざ ま な メ モ リ の 制 限 値 を NNN に 設 定 し ま す 。 フ ラ グ f は 最 大 フ ィ ー ル ド 数 、 フ ラ グ r は 最 大 レ コ ー ド サ イ ズ を 設 定 し ま す 。 こ の 2 つ の フ ラ グ と −m オ プ シ ョ ン は 、 Bell Labs バ ー ジ ョ ン の UNIX awk に 由 来 し て い ま す 。 し か し 、 gawk に は こ の よ う な 制 限 は あ り ま せ ん の で 、 gawk で は 本 オ プ シ ョ ン は 無 視 さ れ ま す 。
-W traditional
−W compat
−−traditional
−−compat
互 換 モ ー ド で 動 作 し ま す 。 互 換 モ ー ド で は 、 gawkUNIX awk と 等 価 な 動 作 を 行 い 、 GNU 独 自 拡 張 は 解 釈 で き ま せ ん 。 こ の オ プ シ ョ ン の 他 の 形 式 よ り も 、 −−traditional を 使 用 す る こ と が 好 ま れ ま す 。 詳 し く は 後 述 の GNU 拡 張 を 参 照 し て く だ さ い 。
−W copyleft
−W copyright
−−copyleft
−−copyright

GNU の 著 作 権 表 示 の 短 い バ ー ジ ョ ン を 標 準 出 力 へ 書 き 出 し 、 成 功 状 態 で 終 了 し ま す 。

−W help
−W usage

−−help

−−usage 短 め の オ プ シ ョ ン 一 覧 を 標 準 出 力 へ 書 き 出 し ま す 。 ( GNU コ ー デ ィ ン グ 規 約 に 従 い 、 本 オ プ シ ョ ン を 指 定 す る と awk は た だ ち に 終 了 し 、 成 功 を 意 味 す る 終 了 ス テ ー タ ス を 返 し ま す 。 )
−W lint

−−lint 他 の

AWK で の 処 理 が 疑 わ し い 、 あ る い は 他 の AWK と の 互 換 性 が な い 構

造 が あ る 場 合 に 警 告 を 行 い ま す 。

−W lint−old
−−lint−old
オ リ ジ ナ ル の Unix awk へ 移 植 で き な い 構 造 に 関 し て 警 告 を 行 い ま す 。
−W posix
−−posix
互 換 モ ー ド を オ ン に し 、 更 に 以 下 の 制 約 が 課 せ ら れ ま す 。

\x エ ス ケ ー プ シ ー ケ ン ス を 解 釈 し ま せ ん 。

FS が 単 一 の 空 白 に 設 定 さ れ た 場 合 、 空 白 と タ ブ の み が フ ィ ー ル ド を 区 切 り 、 改 行 は フ ィ ー ル ド を 区 切 り ま せ ん 。

キ ー ワ ー ド function に 対 応 す る 別 名 func を 解 釈 し ま せ ん 。
• 演 算 子 ^^= の か わ り に ****= を 用 い る こ と が で き ま せ ん 。

fflush() 関 数 は 利 用 で き ま せ ん 。

−W re−interval
−−re−interval
正 規 表 現 の マ ッ チ ン グ で イ ン タ ー バ ル 表 現 (interval expressions) を 有 効 に し ま す (後 述 の 正 規 表 現 を 参 照 し て く だ さ い )。 イ ン タ ー バ ル 表 現 は 伝 統 的 な AWK 言 語 で は 利 用 で き ま せ ん で し た 。 awkegrep が 一 貫 性 を 持 つ よ う に 、 POSIX 標 準 が こ れ ら を 追 加 し ま し た 。 し か し 、 こ れ ら を 使 用 す る と 古 い AWK プ ロ グ ラ ム を 動 か な く し て し ま う で し ょ う か ら 、 こ の オ プ シ ョ ン に よ っ て 要 求 さ れ た と き と 、 −−posix が 指 定 さ れ た と き に 、 gawk は こ れ ら の 機 能 を 提 供 し ま す 。
−W source
program-text
−−source
program-text

program-textAWK プ ロ グ ラ ム と し て 用 い ま す 。 本 オ プ シ ョ ン に よ り 、 ラ イ ブ ラ リ 化 さ れ た 関 数 ( −f ま た は −−file オ プ シ ョ ン を 用 い て 読 み 込 む ) と コ マ ン ド ラ イ ン か ら 入 力 さ れ た プ ロ グ ラ ム を 簡 単 に 合 成 す る こ と が で き ま す 。 こ れ は 、 主 に シ ェ ル ス ク リ プ ト で 用 い ら れ る 中 規 模 か ら 大 規 模 な AWK プ ロ グ ラ ム の た め に 用 意 さ れ ま し た 。

−W version
−−version
実 行 さ れ た gawk プ ロ グ ラ ム の バ ー ジ ョ ン 情 報 を 標 準 出 力 へ 書 き 出 し ま す 。 こ れ は 主 に 、 あ な た が 使 用 し て い る gawk プ ロ グ ラ ム が Free Software Foundation が 配 布 し て い る プ ロ グ ラ ム の う ち 、 最 新 の も の で あ る か ど う か を 知 る 場 合 に 便 利 で す 。 ま た バ グ レ ポ ー ト の と き に も 有 用 で す 。 (本 オ プ シ ョ ン を 指 定 す る と 、 GNU コ ー デ ィ ン グ 規 約 に 従 い 、 awk は た だ ち に 終 了 し 、 成 功 を 意 味 す る 終 了 ス テ ー タ ス を 返 し ま す 。 )

−− オ プ シ ョ ン の 終 了 を 意 味 し ま す 。

AWK プ ロ グ ラ ム に “−” か ら 始 ま る オ

プ シ ョ ン で は な い 引 数 を 与 え る 場 合 に 便 利 で す 。 こ れ は 、 主 に 他 の POSIX プ ロ グ ラ ム の 多 く が 引 数 に 対 し て 行 う 解 釈 と 一 貫 性 を 保 つ た め に あ り ま す 。 互 換 モ ー ド で は 、 他 の オ プ シ ョ ン は 不 正 で あ る と さ れ る か 、 無 視 さ れ ま す 。 通 常 の 実 行 に お い て 、 プ ロ グ ラ ム テ キ ス ト が コ マ ン ド ラ イ ン に 指 定 さ れ て い れ ば 、 不 明 な オ プ シ ョ ン は 、 AWK プ ロ グ ラ ム に ARGV 配 列 を 通 し て 渡 さ れ ま す 。 こ れ は 、 AWK プ ロ グ ラ ム を “#!” 機 構 を 用 い て 実 行 す る 場 合 に 特 に 便 利 で す 。

AWK プ ロ グ ラ ム の 実 行

AWK プ ロ グ ラ ム は 、 パ タ ー ン と ア ク シ ョ ン の 組 の 列 と 、 (も し 必 要 な ら ) 関 数 定 義 か ら な り ま す 。

pattern { action statements }
function
name(parameter list) { statements }

gawk は ま ず 、 program-file (複 数 可 ) が 指 定 さ れ て い れ ば そ れ か ら 、 −−source の 引 数 か ら 、 あ る い は 、 最 初 の オ プ シ ョ ン で は な い 引 数 か ら プ ロ グ ラ ム を 読 み 込 み ま す 。 −f−−source オ プ シ ョ ン は 、 コ マ ン ド ラ イ ン で 複 数 回 指 定 で き ま す 。 gawk は 、 す べ て の program-file と コ マ ン ド ラ イ ン で 指 定 し た プ ロ グ ラ ム を 結 合 し て 使 用 し ま す 。 新 し く 作 っ た AWK プ ロ グ ラ ム ひ と つ ひ と つ に AWK 関 数 の ラ イ ブ ラ リ を 埋 め 込 む 必 要 が 無 い の で 、 こ の 機 能 は ラ イ ブ ラ リ の 構 築 に 便 利 で す 。 ま た 、 ラ イ ブ ラ リ 関 数 と コ マ ン ド ラ イ ン で 指 定 し た プ ロ グ ラ ム と を 混 合 し て 使 う こ と も 可 能 に し て い ま す 。 環 境 変 数 AWKPATH に よ り 、 −f オ プ シ ョ ン で 指 定 さ れ た フ ァ イ ル を 検 索 す る パ ス を 指 定 で き ま す 。 AWKPATH が 設 定 さ れ て い な い 場 合 の デ フ ォ ル ト パ ス は ".:/usr/local/share/awk" で す 。 (実 際 の デ ィ レ ク ト リ は gawk が ど の よ う に 構 築 /イ ン ス ト ー ル さ れ た か に 依 存 し て 、 さ ま ざ ま な も の と な り ま す 。 ) −f オ プ シ ョ ン で 指 定 し た フ ァ イ ル 名 が “/” を 含 ん で い る 場 合 は 、 パ ス 検 索 は 行 わ れ ま せ ん 。

gawk は 、 AWK プ ロ グ ラ ム を 次 の 順 序 で 実 行 し ま す 。 ま ず 、 −v オ プ シ ョ ン で 指 定 さ れ た 変 数 へ の 代 入 を す べ て 行 い ま す 。 次 に 、 プ ロ グ ラ ム を 内 部 形 式 に コ ン パ イ ル し ま す 。 そ し て 、 (も し 存 在 す れ ば ) BEGIN ブ ロ ッ ク (複 数 存 在 可 ) を 実 行 し ま す 。 配 列 ARGV で 指 定 さ れ た フ ァ イ ル を 順 に 読 み 、 処 理 を 行 い ま す (コ マ ン ド ラ イ ン で フ ァ イ ル 名 が 指 定 さ れ て い な け れ ば 、 標 準 入 力 に 対 し て 処 理 を 行 い ま す )。 コ マ ン ド ラ イ ン で 指 定 さ れ た フ ァ イ ル 名 が var=val と い う 形 式 な ら ば 、 そ れ は 変 数 へ の 代 入 で あ る と 解 釈 さ れ ま す 。 変 数 var は 値 val に 設 定 さ れ ま す (こ れ は 、 す べ て の BEGIN ブ ロ ッ ク を 実 行 し た あ と に 行 わ れ ま す )。 コ マ ン ド ラ イ ン で の 変 数 の 代 入 は 、 AWK が 入 力 を フ ィ ー ル ド や レ コ ー ド に 分 割 す る た め の セ パ レ ー タ を 実 行 時 に 変 更 す る の に 便 利 で す 。 ま た 、 1 つ の デ ー タ フ ァ イ ル に 対 し 数 回 処 理 を 行 う 必 要 が あ る 場 合 、 状 態 を コ ン ト ロ ー ル す る の に も 便 利 で す 。 配 列 ARGV の 要 素 に 空 ("") が あ る 場 合 、 gawk は そ の 要 素 を 無 視 し ま す 。

gawk は 、 入 力 さ れ た 各 レ コ ー ド に 対 し て マ ッ チ す る パ タ ー ンAWK プ ロ グ ラ ム 内 に あ る か ど う か を 検 索 し ま す 。 そ の レ コ ー ド に マ ッ チ し た パ タ ー ン す べ て に つ い て 、 そ れ ぞ れ 対 応 す る ア ク シ ョ ン が 実 行 さ れ ま す 。 パ タ ー ン は 、 プ ロ グ ラ ム テ キ ス ト に 出 現 し た 順 序 で 検 索 さ れ ま す 。 入 力 が 尽 き る と 、 gawk は (も し あ れ ば ) END ブ ロ ッ ク (複 数 存 在 可 ) を 実 行 し ま す 。

変 数 、 レ コ ー ド 、 フ ィ ー ル ド

AWK に お け る 変 数 は 動 的 、 す な わ ち 、 最 初 に 使 用 さ れ た と き に 生 成 さ れ ま す 。 変 数 の 値 は 、 浮 動 小 数 点 数 か 、 文 字 列 か 、 あ る い は 両 方 で す 。 変 数 の 用 い ら れ 方 に よ り 変 化 し ま す 。 AWK で は ま た 、 1 次 元 配 列 を 利 用 す る こ と が で き ま す 。 多 次 元 配 列 も 、 擬 似 的 に で は あ り ま す が 、 利 用 可 能 で す 。 プ ロ グ ラ ム 実 行 開 始 時 に 、 い く つ か の 定 義 済 み 変 数 が 設 定 さ れ ま す 。 こ れ ら を 必 要 に 応 じ て 説 明 し 、 以 下 で ま と め ま す 。 レ コ ー ド 通 常 、 レ コ ー ド は 改 行 文 字 に よ り 区 切 ら れ ま す 。 レ コ ー ド の 区 切 り は 、 組 み 込 み 変 数 RS へ 値 を 代 入 す る こ と に よ り 、 制 御 で き ま す 。 RS が 単 一 文 字 の 場 合 、 そ の 文 字 が レ コ ー ド を 区 切 り ま す 。 そ う で な い 場 合 は 、 RS は 正 規 表 現 と な り ま す 。 入 力 中 の テ キ ス ト で 、 こ の 正 規 表 現 に マ ッ チ す る も の が レ コ ー ド を 区 切 り ま す 。 し か し 互 換 モ ー ド で は 、 文 字 列 値 の 最 初 の 文 字 だ け が 、 レ コ ー ド セ パ レ ー タ に 使 用 さ れ ま す 。 RS が 空 文 字 列 に 設 定 さ れ て い る と き に は 、 レ コ ー ド は 空 行 で 区 切 ら れ ま す 。 RS が 空 文 字 列 に 設 定 さ れ た と き に は 、 FS の 値 に か か わ ら ず 、 改 行 文 字 は 常 に フ ィ ー ル ド セ パ レ ー タ と な り ま す 。 フ ィ ー ル ド 入 力 レ コ ー ド を 読 み 込 む ご と に 、 gawk は そ の レ コ ー ド を フ ィ ー ル ド に 分 割 し ま す 。 分 割 す る 際 に は 、 変 数 FS の 値 が フ ィ ー ル ド セ パ レ ー タ と し て 参 照 さ れ ま す 。 FS の 値 が 1文 字 な ら 、 そ の 文 字 を 境 に フ ィ ー ル ド が 分 割 さ れ ま す 。 FS が 空 文 字 列 の 場 合 、 個 々 の 文 字 が フ ィ ー ル ド セ パ レ ー タ と な り ま す 。 い ず れ で も な い 場 合 、 FS は 完 全 な 正 規 表 現 で あ る と 解 釈 さ れ ま す 。 特 殊 な 場 合 と し て FS が 単 一 の 空 白 の と き に は 、 フ ィ ー ル ド は 連 続 し た 空 白 ・ タ ブ ・ 改 行 に よ り 分 割 さ れ ま す 。 (後 述 の −−posix の 議 論 を 参 照 し て く だ さ い )。 変 数 IGNORECASE (下 記 参 照 ) の 値 は 、 FS が 正 規 表 現 の 場 合 フ ィ ー ル ド 分 割 に も 影 響 を 与 え る こ と と 、 RS が 正 規 表 現 の 場 合 レ コ ー ド 分 割 に も 影 響 を 与 え る こ と に 注 意 し て く だ さ い 。 変 数 FIELDWIDTHS の 値 が 空 白 で 区 切 ら れ た 数 字 の 列 で あ る 場 合 、 各 フ ィ ー ル ド は 固 定 長 で あ る と 解 釈 さ れ 、 gawk は 指 定 さ れ た 幅 ご と に フ ィ ー ル ド の 分 割 を 行 い ま す 。 こ の 場 合 、 FS の 値 は 無 視 さ れ ま す 。 FS に 新 た に 値 を 設 定 す る こ と に よ り 、 こ の FIELDWIDTHS の 効 果 を 打 ち 消 し 、 標 準 の 動 作 に 戻 す こ と が で き ま す 。 入 力 レ コ ー ド 中 の 各 フ ィ ー ル ド の 値 は 、 左 か ら $1, $2 等 と い う 名 前 で 参 照 で き ま す 。 $0 は レ コ ー ド 全 体 で す 。 フ ィ ー ル ド に 値 を 代 入 す る こ と も で き ま す 。 フ ィ ー ル ド は 定 数 だ け で な く 、 変 数 に よ っ て 参 照 す る こ と も で き ま す 。 以 下 の 例 で は 、 入 力 レ コ ー ド の 5 番 目 の フ ィ ー ル ド の 値 を 出 力 し ま す 。

n = 5
print $n
変 数 NF は 、 自 動 的 に 入 力 レ コ ー ド の フ ィ ー ル ド の 数 に 設 定 さ れ ま す 。 存 在 し な い フ ィ ー ル ド (す な わ ち 、 $NF よ り 右 の フ ィ ー ル ド ) を 参 照 し た 結 果 は 空 文 字 列 に な り ま す 。 し か し な が ら 、 存 在 し な い フ ィ ー ル ド へ の 代 入 (た と え ば 、 $(NF+2)=5 ) は NF の 値 を 増 加 さ せ 、 間 の フ ィ ー ル ド に は 空 文 字 が 設 定 さ れ ま す 。 さ ら に $0 の 値 は 、 フ ィ ー ル ド の 値 を 変 数 OFS の 値 で フ ィ ー ル ド を 区 切 っ た も の と し て 再 計 算 さ れ ま す 。 負 の フ ィ ー ル ド 番 号 へ の 参 照 は 致 命 的 エ ラ ー と な り ま す 。 NF を 減 少 さ せ る と 、 新 し い 値 を 越 え る フ ィ ー ル ド の 値 は 失 わ れ ま す 。 $0 の 値 は 、 フ ィ ー ル ド の 値 を 変 数 OFS の 値 で フ ィ ー ル ド を 区 切 っ た も の と し て 再 計 算 さ れ ま す 。 組 み 込 み 変 数

gawk の 組 み 込 み 変 数 は 以 下 の と お り で す 。

ARGC コ マ ン ド ラ イ ン 引 数 の 個 数

( gawk へ の オ プ シ ョ ン と 、 プ ロ グ ラ

ム 指 定 は 含 み ま せ ん )。

ARGIND 現 在 処 理 中 の フ ァ イ ル 名 が 格 納 さ れ て い る 配 列

ARGV の イ ン デ ッ

ク ス 。

ARGV コ マ ン ド ラ イ ン 引 数 の 配 列 。 配 列 は 、

0 か ら ARGC − 1 ま で の イ

ン デ ッ ク ス を 持 ち ま す 。 ARGV の 内 容 を 変 更 す る こ と で 、 入 力 に 用 い る フ ァ イ ル 名 を 変 更 す る こ と が で き ま す 。

CONVFMT 数 値 の 変 換 フ ォ ー マ ッ ト 。 デ フ ォ ル ト 値 は

"%.6g" で す 。

ENVIRON 現 在 の 環 境 変 数 の 値 か ら な る 配 列 。 配 列 は 、

環 境 変 数 名 に よ り イ ン デ ッ ク ス さ れ 、 各 要 素 の 値 は そ の 環 境 変 数 の 値 で す (例 え ば ENVIRON["HOME"]/home/arnold と な る で し ょ う )。 本 配 列 に 代 入 を 行 っ て も 、 gawk か ら リ ダ イ レ ク ト や system() 関 数 に よ り 実 行 さ れ る プ ロ グ ラ ム の 環 境 に は 影 響 を 与 え ま せ ん (こ れ は 、 将 来 の gawk で は 変 更 さ れ る 可 能 性 が あ り ま す )。
ERRNO

getline の リ ダ イ レ ク ト 、 getline に よ る 読 み 込 み 、 close() 関 数 の 実 行 時 の い ず れ か に シ ス テ ム エ ラ ー が 発 生 し た 場 合 、 変 数 ERRNO に は エ ラ ー の 内 容 を 示 し た 文 字 列 が 設 定 さ れ ま す 。

FIELDWIDTHS

空 白 で 区 切 ら れ た フ ィ ー ル ド 長 の リ ス ト 。 も し こ の 値 が 設 定 さ れ て い れ ば 、 gawkFS の 値 を 用 い て フ ィ ー ル ド 分 割 す る か わ り に 、 固 定 長 の フ ィ ー ル ド 分 割 を 行 い ま す 。 固 定 長 の フ ィ ー ル ド 分 割 機 能 は ま だ 実 験 的 な も の で 、 gawk が 改 良 さ れ る に 従 っ て 意 味 が 変 化 す る 可 能 性 が あ り ま す 。

FILENAME

現 在 の 入 力 フ ァ イ ル 名 。 も し 、 コ マ ン ド ラ イ ン で 入 力 フ ァ イ ル が 指 定 さ れ て い な け れ ば 、 FILENAME の 値 は “−” で す 。 し か し な が ら 、 BEGIN ブ ロ ッ ク 内 で は FILENAME は 未 定 義 で す 。
FNR

現 在 の 入 力 フ ァ イ ル に お け る 入 力 レ コ ー ド 番 号 。

FS 入 力 フ ィ ー ル ド セ パ レ ー タ 。 デ フ ォ ル ト で は 単 一 の 空 白 で す 。 上 述 の フ ィ ー ル ド を 参 照 し て く だ さ い 。

IGNORECASE す べ て の 正 規 表 現 と 文 字 列 操 作 に お い て 大 文 字 小 文 字 の 区 別 を 制 御 し ま す 。 も し 、

IGNORECASE が 0 で な い 値 に 設 定 さ れ て い れ ば 、 文 字 列 比 較 、 ル ー ル の パ タ ー ン マ ッ チ 、 FS に よ る フ ィ ー ル ド 分 割 、 RS に よ る レ コ ー ド 分 割 、 ~!~ に よ る 正 規 表 現 マ ッ チ 、 定 義 済 み 関 数 gensub(), gsub(), index(), match(), split(), sub() に お い て 大 文 字 と 小 文 字 の 違 い は 無 視 さ れ ま す 。 こ の た め 、 IGNORECASE が 0 以 外 の 値 な ら 、 /aB/"ab", "aB", "Ab", "AB" の い ず れ に も マ ッ チ す る こ と に な り ま す 。 他 の AWK 変 数 と 同 様 に IGNORECASE の 初 期 値 は 0 な の で 、 通 常 は 正 規 表 現 と 文 字 列 操 作 に お い て 大 文 字 と 小 文 字 は 区 別 さ れ ま す 。 Unix で は 、 大 文 字 小 文 字 を 無 視 す る 場 合 、 ISO 8859-1 Latin-1 文 字 集 合 全 て を 使 用 で き ま す 。 注 : 3.0 以 前 の gawk で は IGNORECASE は 正 規 表 現 操 作 の み に 影 響 し ま し た 。 現 在 は 文 字 列 比 較 に も 影 響 し ま す 。

NF 現 在 の 入 力 レ コ ー ド の フ ィ ー ル ド 数 。

NR 現 在 ま で に 読 み 込 ん だ 入 力 レ コ ー ド 数 の 合 計 。

OFMT 数 字 の 出 力 フ ォ ー マ ッ ト 。 デ フ ォ ル ト 値 は

"%.6g" で す 。

OFS 出 力 フ ィ ー ル ド セ パ レ ー タ 。 デ フ ォ ル ト は 空 白 で す 。

ORS 出 力 レ コ ー ド セ パ レ ー タ 。 デ フ ォ ル ト は 改 行 で す 。

RS 入 力 レ コ ー ド セ パ レ ー タ 。 デ フ ォ ル ト は 改 行 で す 。

RT レ コ ー ド タ ー ミ ネ ー タ 。

gawk は 、 RS で 指 定 さ れ る 文 字 ま た は 正 規 表 現 に マ ッ チ す る 入 力 テ キ ス ト を 、 RT に 設 定 し ま す 。

RSTART

match() に よ り マ ッ チ し た 最 初 の 文 字 の 位 置 。 0 は マ ッ チ し な か っ た こ と を 示 し ま す 。

RLENGTH

match() に よ り マ ッ チ し た 文 字 列 の 長 さ 。 −1 は マ ッ チ し な か っ た こ と を 示 し ま す 。

SUBSEP

多 次 元 配 列 を 実 現 す る 際 に 用 い ら れ る 、 配 列 の イ ン デ ッ ク ス を 結 合 す る 文 字 。 デ フ ォ ル ト 値 は "\034" で す 。 配 列 配 列 は 、 ブ ラ ケ ッ ト ([]) の 間 の 式 に よ っ て イ ン デ ッ ク ス を 指 定 し ま す 。 も し 式 が 式 の リ ス ト (式 , 式 ...) な ら 、 式 の 値 を 変 数 SUBSEP の 値 を 区 切 り と し て 結 合 し た 文 字 列 を イ ン デ ッ ク ス と し て 用 い ま す 。 こ れ に よ り 、 多 次 元 配 列 を シ ミ ュ レ ー ト し て い ま す 。 例 え ば 、

i = "A"; j = "B"; k = "C"
x[i, j, k] = "hello, world\n"
は 、 文 字 列 "hello, world\n" を 、 文 字 列 "A\034B\034C" で イ ン デ ッ ク ス し た 配 列 x の 要 素 に 代 入 し て い ま す 。 AWK の 配 列 は す べ て 、 文 字 列 に よ り イ ン デ ッ ク ス を 行 う 連 想 配 列 で す 。 特 殊 な 演 算 子 inif ま た は while ス テ ー ト メ ン ト で 用 い る こ と に よ っ て 、 あ る イ ン デ ッ ク ス 値 に お け る 配 列 の 値 が 定 義 さ れ て い る か を 調 べ る こ と が で き ま す 。

if (val in array)

print array[val] も し 、 配 列 が 多 次 元 イ ン デ ッ ク ス を 持 つ な ら 、 (i, j) in array を 用 い ま す 。

in は ま た 、 for ル ー プ 中 で 、 配 列 の す べ て の イ ン デ ッ ク ス 値 に つ い て 繰 り 返 す た め に 用 い る こ と が で き ま す 。 配 列 の 要 素 は 、 delete ス テ ー ト メ ン ト を 用 い て 削 除 す る こ と が で き ま す 。 delete ス テ ー ト メ ン ト は ま た 、 添 字 を 指 定 せ ず に 配 列 名 の み を 指 定 す る こ と に よ り 、 配 列 全 体 を 削 除 す る た め に も 使 え ま す 。 変 数 の 型 と 変 換 変 数 と フ ィ ー ル ド は 、 (浮 動 小 数 点 数 の ) 数 値 ま た は 文 字 列 、 あ る い は 両 方 と し て 扱 わ れ ま す 。 変 数 の 値 が ど の よ う に 解 釈 さ れ る か は 、 変 数 の 使 わ れ 方 に よ っ て 変 化 し ま す 。 数 式 中 で 用 い ら れ れ ば 変 数 は 数 値 と し て 解 釈 さ れ 、 文 字 列 と し て 用 い ら れ れ ば 文 字 列 と し て 解 釈 さ れ ま す 。 変 数 の 値 を 強 制 的 に 数 値 で あ る と 解 釈 さ せ た い 場 合 は 、 変 数 に 0 を 加 え ま す 。 文 字 列 と 解 釈 さ せ た い 場 合 は 空 文 字 列 を 結 合 し ま す 。 文 字 列 を 数 値 に 変 換 す る 必 要 が あ る 場 合 、 変 換 は atof(3) に よ っ て 行 わ れ ま す 。 数 値 を 文 字 列 に 変 換 す る 場 合 は 、 変 数 CONVFMT の 値 を フ ォ ー マ ッ ト 文 字 列 と し て 用 い て 、 sprintf(3) に よ り 行 わ れ ま す 。 AWK で は す べ て の 数 値 は 浮 動 小 数 点 数 で す が 、 整 数 値 は 常 に 整 数 と し て 変 換 が 行 わ れ ま す 。 よ っ て 、 以 下 の 場 合 、

CONVFMT = "%2.2f"
a = 12
b = a ""
変 数b は 文 字 列 値 "12" と な り 、 "12.00" と は な り ま せ ん 。

gawk は 、 以 下 の よ う に し て 比 較 を 行 い ま す : 2 つ の 変 数 が 数 値 な ら 数 値 と し て 比 較 し ま す 。 も し 片 方 が 数 値 で 片 方 が ’数 値 ’文 字 列 な ら 、 数 値 と し て 比 較 さ れ ま す 。 片 方 が 数 値 で な い 文 字 列 な ら 、 数 値 の ほ う が 文 字 列 に 変 換 さ れ 、 文 字 列 と し て 比 較 さ れ ま す 。 両 方 と も 文 字 列 な ら 、 文 字 列 と し て 比 較 さ れ ま す 。 POSIX 標 準 に 従 う な ら 、 両 方 と も 数 値 文 字 列 の 場 合 は 数 値 と し て 比 較 し ま す が 、 こ れ は 明 ら か に 間 違 い で す 。 gawk は そ の よ う な 動 作 を し ま せ ん 。

"57" の よ う な 文 字 列 定 数 は 数 値 文 字 列 で は な く 、 文 字 列 定 数 で す 。 「 数 値 文 字 列 」 の 概 念 は 、 フ ィ ー ル ド 、 getline の 入 力 、 FILENAMEARGV の 要 素 、 ENVIRON の 要 素 、 数 値 文 字 列 か ら split() に よ っ て 作 成 さ れ た 配 列 の 要 素 に 対 し て の み 適 用 さ れ ま す 。 基 本 的 な 考 え 方 で は 、 ユ ー ザ 入 力 、 そ れ も 数 値 に 見 え る ユ ー ザ 入 力 の み が 数 値 と し て 扱 わ れ ま す 。 初 期 化 さ れ て い な い 変 数 は 、 数 値 と し て は 0 を 、 文 字 列 と し て は "" (空 文 字 列 ) を 持 ち ま す 。

パ タ ー ン と ア ク シ ョ ン

awk は 行 指 向 の 言 語 で す 。 ま ず パ タ ー ン 、 次 に ア ク シ ョ ン が 続 き ま す 。 ア ク シ ョ ン は {} で 囲 み ま す 。 パ タ ー ン ま た は ア ク シ ョ ン は 省 略 す る こ と も で き ま す 。 も ち ろ ん 、 両 方 と も 省 略 し て し ま っ て は 意 味 が あ り ま せ ん 。 パ タ ー ン が な い 場 合 、 ア ク シ ョ ン は す べ て の 入 力 レ コ ー ド に 対 し て 適 用 さ れ ま す 。 省 略 さ れ た ア ク シ ョ ン は 以 下 と 等 価 で す 。

{ print } こ れ は レ コ ー ド 全 体 を 出 力 し ま す 。 コ メ ン ト は 文 字 “#” で 始 ま り 、 行 末 ま で 続 き ま す 。 空 行 は 、 複 数 ス テ ー ト メ ン ト の 間 を あ け る の に 使 う こ と が で き ま す 。 通 常 、 ス テ ー ト メ ン ト は 改 行 で 終 わ り ま す 。 た だ し 、 次 の 記 号 で 行 が 終 わ る 場 合 に は こ の 限 り で は あ り ま せ ん : “,”, {, ?, :, &&, ||do ま た は else で 終 わ る 行 は 、 ス テ ー ト メ ン ト が 自 動 的 に 以 降 の 行 へ 継 続 さ れ ま す 。 ま た 、 改 行 の 直 前 に “\” を 置 く こ と で 、 行 を 継 続 す る こ と が で き ま す 。 こ の 場 合 、 そ の 改 行 は 無 視 さ れ ま す 。

“;” で 区 切 る こ と に よ り 、 1行 に 複 数 の ス テ ー ト メ ン ト を 記 述 す る こ と が で き ま す 。 (通 常 の よ う に ) パ タ ー ン -ア ク シ ョ ン 対 中 の ア ク シ ョ ン 部 に お け る ス テ ー ト メ ン ト だ け で は な く 、 パ タ ー ン -ア ク シ ョ ン 対 ス テ ー ト メ ン ト 自 身 も 、
“;” で 区 切 っ て 複 数 置 く こ と が で き ま す 。 パ タ ー ン
AWK
の パ タ ー ン は 、 以 下 の う ち の い ず れ か で す 。

BEGIN
END
/
regular expression/
relational expression
pattern
&& pattern
pattern
|| pattern
pattern
? pattern : pattern
(
pattern)
!
pattern
pattern1
, pattern2

BEGINEND は 特 殊 な パ タ ー ン で あ り 、 入 力 と 比 較 さ れ る こ と は あ り ま せ ん 。 す べ て の BEGIN パ タ ー ン に 対 応 し た ア ク シ ョ ン 部 は 結 合 さ れ 、 そ の よ う な す べ て の ア ク シ ョ ン 部 が 単 一 の BEGIN ブ ロ ッ ク 中 に あ る か の よ う に 扱 わ れ ま す 。 結 合 さ れ た ア ク シ ョ ン は 、 す べ て の 入 力 フ ァ イ ル の 読 み 込 み に 先 立 っ て 実 行 さ れ ま す 。 同 様 に す べ て の END ブ ロ ッ ク は 結 合 さ れ 、 す べ て の 入 力 フ ァ イ ル の 処 理 後 (あ る い は 、 exit ス テ ー ト メ ン ト が 実 行 さ れ た と き ) に 実 行 さ れ ま す 。 BEGINEND は パ タ ー ン 式 内 で 他 の パ タ ー ン と 混 ぜ て 使 う こ と は で き ま せ ん 。 ま た 、 BEGINEND パ タ ー ン は ア ク シ ョ ン 部 を 省 略 す る こ と が で き ま せ ん 。

/regular expression/ パ タ ー ン で は 、 正 規 表 現 (regular expression) に マ ッ チ し た 入 力 レ コ ー ド に 対 し て ア ク シ ョ ン が 実 行 さ れ ま す 。 正 規 表 現 は egrep(1) と 同 じ も の が 使 え ま す 。 あ と に 要 約 を 示 し ま す 。 関 係 式 (relational expression) で は 、 後 述 の ア ク シ ョ ン に つ い て の 節 で 示 す 演 算 子 を 用 い る こ と が で き ま す 。 こ れ ら は 概 し て 、 特 定 の フ ィ ー ル ド が 正 規 表 現 に マ ッ チ す る か ど う か を 調 べ る た め に 用 い ら れ ま す 。 演 算 子 &&, ||, ! は 、 そ れ ぞ れ C 言 語 で の 論 理 AND、 論 理 OR、 論 理 NOT と 等 価 で す 。 C 言 語 と 同 様 に 、 評 価 値 が 確 定 し た 時 点 で 以 降 の 評 価 を 打 ち 切 り ま す 。 こ れ ら は 複 数 の パ タ ー ン 式 を 結 合 す る た め に 使 用 さ れ ま す 。 他 の プ ロ グ ラ ミ ン グ 言 語 と 同 様 、 括 弧 に よ っ て 評 価 順 序 を 変 更 す る こ と が で き ま す 。

?: 演 算 子 は C 言 語 の も の と 同 様 で す 。 も し 、 最 初 の パ タ ー ン が 真 な ら 、 テ ス ト の た め に 2 番 目 の パ タ ー ン が 用 い ら れ 、 そ う で な け れ ば 3 番 目 の パ タ ー ン が 用 い ら れ ま す 。 2 番 目 と 3 番 目 の パ タ ー ン の ど ち ら か だ け が 評 価 さ れ ま す 。

pattern1, pattern2 形 式 は 範 囲 パ タ ー ン と 呼 ば れ ま す 。 範 囲 パ タ ー ン は 、 pattern1 に マ ッ チ す る レ コ ー ド か ら 、 pattern2 に マ ッ チ す る レ コ ー ド ま で の す べ て に マ ッ チ し ま す 。 こ の 形 式 は 、 他 の パ タ ー ン 式 と 混 合 し て 用 い る こ と は で き ま せ ん 。 正 規 表 現
awk の 正 規 表 現 は egrep の も の と 同 様 に 、 拡 張 さ れ た 正 規 表 現 で す 。 以 下 の 構 成 要 素 か ら 成 り 立 っ て い ま す 。

c メ タ 文 字 で は な い

c に マ ッ チ し ま す 。

\c リ テ ラ ル 文 字

c に マ ッ チ し ま す 。

. 改 行 を 含 む 任 意 の

1 文 字 に マ ッ チ し ま す 。

^ 文 字 列 の 先 頭 に マ ッ チ

し ま す 。

$ 文 字 列 の 終 端 に マ ッ チ し ま す 。

[abc...] 文 字 リ ス ト で あ り 、

abc... の い ず れ か 1 文 字 に マ ッ チ し ま す 。

[^abc...] 文 字 リ ス ト の 逆 で あ り 、

abc... 以 外 の 1 文 字 に マ ッ チ し ま す 。

r1|r2 選 言 :

r1 ま た は r2 に マ ッ チ し ま す 。

r1r2 結 合 :

r1 の 直 後 に r2 が 続 く も の に マ ッ チ し ま す 。

r+

r の 1 回 以 上 の 繰 り 返 し に マ ッ チ し ま す 。

r*

r の 0 回 以 上 の 繰 り 返 し に マ ッ チ し ま す 。

r?

r の 0 回 ま た は 1 回 の 繰 り 返 し に マ ッ チ し ま す 。

(r)

グ ル ー プ 化 : r に マ ッ チ し ま す 。
r
{n}
r
{n,}
r
{n,m} ブ レ ー ス 中 に 1 つ か 2 つ の 数 値 を 記 述 す る こ と に よ り 、 イ ン

タ ー バ ル 表 現 を 表 し ま す 。 ブ レ ー ス 中 に 数 値 が 1 つ あ る 場 合 、 直 前 の 正 規 表 現 rn 回 繰 り 返 さ れ ま す 。 2 つ の 数 値 が コ ン マ で 区 切 ら れ て い る 場 合 、 rn 回 か ら m 回 繰 り 返 さ れ ま す 。 1 つ の 数 値 に 続 い て コ ン マ が あ る 場 合 、 r は 少 な く と も n 回 繰 り 返 さ れ ま す 。 イ ン タ ー バ ル 表 現 は −−posix ま た は −−re−interval が コ マ ン ド ラ イ ン に て 指 定 さ れ て い る と き の み 利 用 可 能 で す 。

\y 語 の 先 頭 ま た は 末 尾 の 空 文 字 列 に マ ッ チ し ま す 。

\B 語 の 中 の 空 文 字 列 に マ ッ チ し ま す 。

\< 語 の 先 頭 の 空 文 字 列 に マ ッ チ し ま す 。

\> 語 の 末 尾 の 空 文 字 列 に マ ッ チ し ま す 。

\w 語 を 構 成 す る 文 字

(レ タ ー 、 数 値 、 ア ン ダ ス コ ア ) に マ ッ チ し ま す 。

\W 語 を 構 成 す る 文 字 以 外 の 文 字 に マ ッ チ し ま す 。

\’ バ ッ フ ァ

(文 字 列 ) の 先 頭 の 空 文 字 列 に マ ッ チ し ま す 。

\’ バ ッ フ ァ の 末 尾 の 空 文 字 列 に マ ッ チ し ま す 。 文 字 列 定 数 中 で 用 い る こ と が で き る エ ス ケ ー プ シ ー ケ ン ス

(後 述 参 照 ) は 、 正

規 表 現 中 で も 使 用 す る こ と が で き ま す 。 文 字 ク ラ スPOSIX 標 準 で 導 入 さ れ た 新 機 能 で す 。 文 字 ク ラ ス は 特 定 の 属 性 を 持 つ 文 字 列 リ ス ト の 特 殊 表 現 で す が 、 実 際 の 文 字 集 合 自 身 は 国 や 文 字 集 合 に よ っ て 様 々 な も の と な り ま す 。 例 え ば 、 ア ル フ ァ ベ ッ ト 文 字 は ア メ リ カ 合 州 国 と フ ラ ン ス と で は 異 な り ま す 。 文 字 ク ラ ス が 有 効 な の は 、 文 字 リ ス ト の ブ ラ ケ ッ ト の 中 の 正 規 表 現 だ け で す 。 文 字 ク ラ ス は 、 [: と 、 ク ラ ス を 表 現 す る キ ー ワ ー ド と 、 :] で 構 成 さ れ ま す 。 以 下 に POSIX 表 現 で 定 義 さ れ る 文 字 ク ラ ス を 示 し ま す 。
[:alnum:]
ア ル フ ァ ベ ッ ト と 数 値 文 字 。
[:alpha:]
ア ル フ ァ ベ ッ ト 文 字 。
[:blank:]
空 白 と タ ブ 文 字 。
[:cntrl:]
制 御 文 字 。
[:digit:]
数 値 文 字 。
[:graph:]
印 字 可 能 で 可 視 な 文 字 。 (空 白 は 印 字 可 能 で す が 見 え ま せ ん 。 一 方 a は 印 字 可 能 か つ 可 視 で す 。 )
[:lower:]
ア ル フ ァ ベ ッ ト 文 字 の 小 文 字 。
[:print:]
印 字 可 能 な 文 字 (制 御 文 字 以 外 )。
[:punct:]
句 読 点 文 字 (レ タ ー 、 数 値 、 制 御 文 字 、 空 白 文 字 の い ず れ で も な い 文 字 )。
[:space:]
空 白 文 字 (空 白 、 タ ブ 、 フ ォ ー ム フ ィ ー ド 等 の 少 数 の 文 字 を 指 す )。
[:upper:]
ア ル フ ァ ベ ッ ト 文 字 の 大 文 字 。
[:xdigit:]

16 進 数 の 数 値 。 例 え ば 、 POSIX 標 準 以 前 で は 、 ア ル フ ァ ベ ッ ト と 数 値 の 文 字 に マ ッ チ す る た め に は 、 /[A−Za−z0−9]/ と 書 き ま し た 。 し か し 、 別 の ア ル フ ァ ベ ッ ト 文 字 が 文 字 集 合 に 含 ま れ る 場 合 、 そ れ ら に は マ ッ チ し ま せ ん 。 POSIX 文 字 ク ラ ス で は 、 /[[:alnum:]]/ と 記 述 す る こ と が で き 、 文 字 集 合 の す べ て の ア ル フ ァ ベ ッ ト と 数 値 に マ ッ チ し ま す 。 文 字 リ ス ト 中 に は 、 更 に 2 つ の 特 殊 シ ー ケ ン ス を 使 用 で き ま す 。 こ れ ら は 、 複 数 の 文 字 に よ っ て 表 現 さ れ る 単 一 シ ン ボ ル ( 照 合 文 字 と 呼 ば れ ま す ) を 持 ち 、 複 数 の 文 字 が 参 照 や ソ ー ト に お い て は 等 価 で あ る と さ れ る 、 非 ASCII 文 字 集 合 に 適 用 さ れ ま す 。 (例 え ば 、 フ ラ ン ス 語 で は 単 な る “e” と グ レ ー ブ ア ク セ ン ト 付 き の e` と で は 等 価 で す 。 ) 照 合 シ ン ボ ル 参 照 シ ン ボ ル は 複 数 文 字 の 参 照 要 素 で あ り 、 [..] で 括 り ま す 。 例 え ば 、 ch が 参 照 要 素 の 場 合 、 [[.ch.]] は 正 規 表 現 と な り 、 こ の 参 照 要 素 に マ ッ チ し ま す 。 一 方 、 [ch]ch に マ ッ チ す る 正 規 表 現 で す 。 等 価 ク ラ ス 等 価 ク ラ ス は 等 価 な 文 字 リ ス ト を 指 す ロ ケ ー ル 固 有 の 名 前 で す 。 名 前 は [==] で 括 り ま す 。 例 え ば 、 名 前 e は “e,” “e`,”, “e`.” の す べ て を 表 現 す る た め に 使 用 さ れ る か も し れ ま せ ん 。 こ の 場 合 、 [[=e=]]e, , e` の い ず れ か に マ ッ チ す る 正 規 表 現 と な り ま す 。 こ れ ら の 機 能 は 英 語 以 外 の ロ ケ ー ル に て 非 常 に 有 用 で す 。 gawk が 正 規 表 現 の マ ッ チ ン グ に 使 用 す る ラ イ ブ ラ リ 関 数 は 、 現 在 POSIX 文 字 ク ラ ス の み を 理 解 し 、 参 照 シ ン ボ ル と 等 価 ク ラ ス は 理 解 し ま せ ん 。

\y, \B, \<, \>, \w, \W, \’, \’ の 演 算 子 は gawk 固 有 で あ り 、 GNU 正 規 表 現 ラ イ ブ ラ リ の 機 能 を 元 に し た 拡 張 で す 。 様 々 な コ マ ン ド ラ イ ン オ プ シ ョ ン に よ っ て 、 正 規 表 現 中 の 文 字 を gawk が ど の よ う に 解 釈 す る の か を 制 御 で き ま す 。 オ プ シ ョ ン 無 し デ フ ォ ル ト で は 、 gawk は 上 述 の POSIX 正 規 表 現 お よ び GNU 正 規 表 現 の す べ て の 機 能 を 提 供 し ま す 。 し か し な が ら 、 イ ン タ ー バ ル 表 現 は サ ポ ー ト さ れ ま せ ん 。
−−posix

POSIX 正 規 表 現 の み が サ ポ ー ト さ れ 、 GNU 演 算 子 は サ ポ ー ト さ れ ま せ ん (例 え ば 、 \w は リ テ ラ ル w に マ ッ チ し ま す )。 イ ン タ ー バ ル 表 現 は 許 さ れ ま す 。

−−traditional 伝 統 的 な Unix awk の 正 規 表 現 が サ ポ ー ト さ れ ま す 。 GNU 演 算 子 、 イ ン タ ー バ ル 表 現 、 POSIX 文 字 ク ラ ス ( [[:alnum:]] な ど ) は サ ポ ー ト さ れ ま せ ん 。 8 進 ま た は 16 進 の エ ス ケ ー プ シ ー ケ ン ス で 表 現 さ れ る 文 字 は 、 正 規 表 現 の メ タ 文 字 を 表 現 す る と し て も 、 リ テ ラ ル と し て 扱 わ れ ま す 。
−−re−interval

−−traditional が 指 定 さ れ て い た と し て も 、 正 規 表 現 中 で イ ン タ ー バ ル 表 現 を サ ポ ー ト し ま す 。 ア ク シ ョ ン ア ク シ ョ ン は 、 ブ レ ー ス {} で 囲 み ま す 。 ア ク シ ョ ン は 通 常 の 代 入 、 条 件 文 、 ル ー プ 文 等 か ら な り ま す 。 演 算 子 、 制 御 文 、 入 出 力 文 は C 言 語 と ほ ぼ 同 様 で す 。 演 算 子

AWK で の 演 算 子 を 、 優 先 順 位 の 高 い も の か ら 順 に 示 し ま す 。

(...) グ ル ー プ 化 。

$ フ ィ ー ル ド 参 照 。

++ −− イ ン ク リ メ ン ト 、 デ ク リ メ ン ト 。 前 置 も 後 置 も 可 能 。

^ べ き 乗

(** も 同 様 の 意 味 で 使 用 で き る 。 ま た **= 代 入 演 算 子 も 存 在 す る )。

+ − ! 単 項 の プ ラ ス 、 マ イ ナ ス 、 論 理 否 定 。

* / % 乗 算 、 除 算 、 剰 余 。

+ − 加 算 と 減 算 。

space 文 字 列 結 合 。

< >

<= >=

!= == 通 常 の 関 係 演 算 子 。

~ !~ 正 規 表 現 マ ッ チ 、 否 定 の マ ッ チ 。 注 意 :

~!~ の 左 辺 に 正 規 表

現 定 数 (/foo/等 ) を 用 い て は い け ま せ ん 。 正 規 表 現 定 数 は 右 辺 に の み 置 く こ と が で き ま す 。 式 /foo/ ~ exp(($0 ~ /foo/) ~ exp) と 等 価 で あ り 、 こ れ は 通 常 意 図 す る も の と は 異 な り ま す 。

in 配 列 の メ ン バ 。

&& 論 理

AND。

|| 論 理

OR。

?:

C 言 語 の 条 件 式 と 同 様 で す 。 expr1 ? expr2 : expr3の 形 式 で 使 い ま す 。 も し expr1 が 真 な ら 式 の 値 は expr2 に な り 、 そ う で な け れ ば expr3 に な り ま す 。 expr2expr3 の う ち 片 方 の み が 評 価 さ れ ま す 。

= += −=

*= /= %= ^= 代 入 。 絶 対 代 入

(var = value) と 演 算 子 代 入 (他 の 形 式 ) が サ

ポ ー ト さ れ て い ま す 。 制 御 ス テ ー ト メ ン ト 制 御 ス テ ー ト メ ン ト は 以 下 の と お り で す 。

if (condition) statement [ else statement ]
while (
condition) statement
do
statement while (condition)
for (
expr1; expr2; expr3) statement
for (
var in array) statement
break
continue
delete
array[index]
delete
array
exit
[ expression ]
{
statements } 入 出 力 ス テ ー ト メ ン ト 入 出 力 ス テ ー ト メ ン ト は 以 下 の と お り で す 。

close(file) フ ァ イ ル

(ま た は パ イ プ 、 下 記 参 照 ) を ク ロ ー ズ し ま

す 。

getline 次 の レ コ ー ド を

$0 に 読 み 込 み ま す 。 NF, NR, FNR が 設

定 さ れ ま す 。

getline <file フ ァ イ ル

file か ら 次 の レ コ ー ド を $0 に 読 み 込 み ま

す 。 NF が 設 定 さ れ ま す 。

getline var 次 の レ コ ー ド を 変 数

var に 読 み 込 み ま す 。 NR, FNR

設 定 さ れ ま す 。

getline var <file フ ァ イ ル

file か ら 次 の レ コ ー ド を 変 数 var に 読 み 込 み

ま す 。

next 現 在 の レ コ ー ド に 対 す る 処 理 を 終 了 し 、 次 の レ コ ー ド を 読 み 込 み 、

AWK プ ロ グ ラ ム の 最 初 の パ タ ー ン か ら 処 理 を 開 始 し ま す 。 C 言 語 の continue と 類 似 し た 意 味 を 持 ち ま す 。 も し 、 入 力 デ ー タ の 終 端 に 達 し た 場 合 、 END ブ ロ ッ ク が 存 在 す れ ば 実 行 さ れ ま す 。

nextfile 現 在 の 入 力 フ ァ イ ル に 対 す る 処 理 を 終 了 し 、 次 の 入 力 フ ァ イ ル か ら レ コ ー ド を 読 み 込 み ま す 。

FILENAMEARGIND が 更 新 さ れ 、 FNR が 1 に リ セ ッ ト さ れ 、 AWK プ ロ グ ラ ム の 最 初 の パ タ ー ン か ら 処 理 が 開 始 さ れ ま す 。 入 力 デ ー タ の 終 端 に 達 し た と き は 、 も し 存 在 す れ ば 、 END ブ ロ ッ ク が 実 行 さ れ ま す 。 注 : 以 前 の バ ー ジ ョ ン の gawk で は next file と 2 語 で 使 用 さ れ て い ま し た 。 こ の 用 法 は ま だ 認 識 さ れ ま す が 、 警 告 メ ッ セ ー ジ を 生 じ さ せ ま す し 、 最 終 的 に は 無 く な る 表 現 で す 。

print 現 在 の レ コ ー ド を 出 力 し ま す 。 出 力 レ コ ー ド は

ORS

数 の 値 に て 終 端 さ れ ま す 。

print expr-list 式 を 出 力 し ま す 。 各 式 は

OFS の 値 で 区 切 ら れ ま す 。 出 力

さ れ る レ コ ー ド の 最 後 に は ORS の 値 が 付 加 さ れ ま す 。

print expr-list >file 式 を フ ァ イ ル file に 出 力 し ま す 。 各 式 は OFS の 値 で 区 切 ら れ ま す 。 出 力 さ れ る レ コ ー ド の 最 後 に は ORS の 値 が 付 加 さ れ ま す 。
printf
fmt, expr-list 書 式 付 き 出 力 で す 。
printf
fmt, expr-list >file フ ァ イ ル file へ の 書 式 付 き 出 力 で す 。

system(cmd-line) コ マ ン ド

cmd-line を 実 行 し 、 終 了 ス テ ー タ ス を 返 し ま

す ( POSIX に 対 応 し な い シ ス テ ム で は 使 用 で き な い 場 合 が あ り ま す )。

fflush([file]) オ ー プ ン さ れ て い る 出 力 フ ァ イ ル ま た は パ イ プ

file

関 連 づ け ら れ て い る バ ッ フ ァ を フ ラ ッ シ ュ し ま す 。 file を 指 定 し な い と 、 標 準 出 力 が フ ラ ッ シ ュ さ れ ま す 。 file が 空 文 字 列 の 場 合 、 オ ー プ ン さ れ て い る す べ て の フ ァ イ ル と パ イ プ の バ ッ フ ァ を フ ラ ッ シ ュ し ま す 。 そ の 他 の 形 式 の リ ダ イ レ ク ト と し て 以 下 の も の が 利 用 可 能 で す 。 printprintf に 対 し て 、 >> file を 指 定 す る と 出 力 は フ ァ イ ル file に 追 加 さ れ 、 | command は 出 力 を パ イ プ に 対 し て 行 い ま す 。 同 様 に 、 command| getline は コ マ ン ド の 出 力 か ら getline を 行 な い ま す 。 getline は フ ァ イ ル 終 端 で は 0 を 、 エ ラ ー 時 に は −1 を 返 し ま す 。 注 : ル ー プ 中 で getline へ パ イ プ 書 き 込 み す る 場 合 ま た は printprintf か ら パ イ プ 読 み 取 り す る 場 合 、 コ マ ン ド の 新 イ ン ス タ ン ス を 作 成 す る た め に close() を 使 用 す る こ と が 必 要 で す 。 パ イ プ が EOF を 返 す と き で も 、 AWK は 自 動 的 に は パ イ プ を 閉 じ ま せ ん 。

printf ス テ ー ト メ ン ト
AWK
で の printf ス テ ー ト メ ン ト と sprintf() 関 数 (後 述 参 照 ) は 、 以 下 の 変 換 指 定 書 式 を 受 け 付 け ま す 。

%c

1 つ の ASCII 文 字 。 %c に 対 応 す る 引 数 が 数 値 な ら 、 そ の 値 を ASCII コ ー ド と み な し て 文 字 に 変 換 し ま す 。 そ う で な け れ ば 、 引 数 は 文 字 列 で あ る と 解 釈 さ れ 、 そ の 1 文 字 目 が 出 力 さ れ ま す 。

%d

%i

10 進 数 (整 数 部 分 )。

%e

%E

[-]d.dddddde[+-]dd と い う 形 式 の 浮 動 小 数 点 数 。 %E 形 式 で は e の 代 り に E が 使 用 さ れ ま す 。

%f

[-]ddd.dddddd と い う 形 式 の 浮 動 小 数 点 数 。

%g

%G

%e%f の 短 い 方 の 形 式 の 浮 動 小 数 点 数 。 余 計 な 0 は 省 略 さ れ ま す 。 %G 形 式 で は %e の 代 り に %E を 使 用 し ま す 。

%o

符 号 な し の 8 進 数 (整 数 )。
%u
符 号 な し の 10 進 数 (整 数 )。
%s
文 字 列 。
%x
%X
符 号 な し の 16 進 数 (整 数 )。 %X 形 式 で は 、 abcdef の 代 り に ABCDEF

を 用 い ま す 。

%% 単 一 の 文 字

% 。 引 数 は 使 用 し ま せ ん 。

% と 上 記 の 制 御 文 字 と の 間 に オ プ シ ョ ナ ル な 追 加 の パ ラ メ ー タ を 置 く こ と が で き ま す 。 以 下 に そ れ ら を 示 し ま す 。

左 寄 せ 。

空 白 数 値 変 換 に お い て 、 正 の 値 の プ レ フ ィ ッ ク ス は 空 白 と な り 、 負 の 値 の プ レ フ ィ ッ ク ス は マ イ ナ ス 記 号 と な り ま す 。

+ プ ラ ス 記 号 は 幅 修 正 子

(後 述 ) の 前 に 使 用 し 、 整 形 さ れ る デ ー タ が 正 で あ っ た と し て も 、 数 値 変 換 に 対 し て 常 に 符 号 を 付 け る こ と を 指 示 し ま す 。 + は 空 白 修 正 子 に 優 先 し ま す 。

# あ る 制 御 レ タ ー に 対 し て 「 別 の 形 式 」 を 使 用 し ま す 。

%o に 対 し て は 先

行 す る 0 を 与 え 、 %x%X に 対 し て は 非 0 の 結 果 に 対 し て 先 行 す る 0x0X を 与 え ま す 。 %e, %E, %f に 対 し て は 結 果 に 常 に 小 数 点 を 含 め ま す 。 %g, %G に 対 し て は 結 果 の 末 尾 か ら 0 を 取 り 除 き ま せ ん 。

0 先 頭 の

0 (ゼ ロ ) は フ ラ グ と し て 動 作 し 、 出 力 を 空 白 で は な く 0 で パ

デ ィ ン グ す る こ と を 示 し ま す 。 こ れ は 非 数 値 の 出 力 書 式 に 対 し て も 適 用 さ れ ま す 。 こ の フ ラ グ が 有 効 な の は 、 フ ィ ー ル ド 幅 が 印 字 さ れ る 値 の 幅 よ り 広 い と き だ け で す 。

width フ ィ ー ル ド が 指 定 し た 幅

width に な る よ う に パ デ ィ ン グ さ れ ま

す 。 フ ィ ー ル ド は 通 常 空 白 で パ デ ィ ン グ さ れ ま す 。 0 フ ラ グ が 使 用 さ れ た 場 合 に は 0 で パ デ ィ ン グ さ れ ま す 。

.prec 印 字 に お い て 使 用 す る 精 度 を 数 値 で 指 定 し ま す 。

%e, %E, %f の 書 式 に

対 し て は 、 小 数 点 の 右 側 に 印 字 さ れ る 数 字 の 数 を 指 定 し ま す 。 %g, %G の 書 式 に 対 し て は 、 仮 数 部 の 最 大 数 を 指 定 し ま す 。 %d, %o, %i, %u, %x, %X の 書 式 に 対 し て は 、 印 字 さ れ る 数 字 の 最 小 数 を 指 定 し ま す 。 文 字 列 に 対 し て は 、 印 字 さ れ る 文 字 列 か ら と り だ さ れ る 最 大 の 文 字 数 を 指 定 し ま す 。

ANSI C の printf() の 動 的 な 幅 width と 精 度 prec の 指 定 機 能 が 使 用 で き ま す 。 ま た は 精 度 の 指 定 部 分 に * を 指 定 す る こ と で 、 そ の 値 を printf ま た は sprintf() へ の 引 数 で 指 定 で き ま す 。 特 殊 フ ァ イ ル 名
print
printf で 書 き 込 み と き で も 、 getline で フ ァ イ ル か ら 読 み 取 る と き で も 、 入 出 力 リ ダ イ レ ク ト を 行 う 場 合 、 gawk は 内 部 的 な 特 殊 な フ ァ イ ル 名 を 解 釈 し ま す 。 こ れ ら の フ ァ イ ル 名 に よ り 、 親 プ ロ セ ス (通 常 は シ ェ ル で す ) か ら 受 け 継 い だ オ ー プ ン 状 態 の フ ァ イ ル デ ィ ス ク リ プ タ を 用 い て 入 出 力 を 行 っ た り 、 実 行 中 の gawk プ ロ セ ス に 関 す る 情 報 を 得 る こ と が で き ま す 。 特 殊 フ ァ イ ル 名 は 以 下 の と お り で す 。

/dev/pid 現 在 の プ ロ セ ス の プ ロ セ ス

ID (10 進 数 で 、 最 後 に 改 行 が 付 き ま

す ) を 読 み 込 む こ と が で き ま す 。

/dev/ppid 現 在 の プ ロ セ ス の 親 の プ ロ セ ス の プ ロ セ ス

ID (10 進 数 で 、 最 後 に

改 行 が 付 き ま す ) を 読 み 込 む こ と が で き ま す 。

/dev/pgrpid 現 在 の プ ロ セ ス の プ ロ セ ス グ ル ー プ

ID (10 進 数 で 、 最 後 に 改 行

が 付 き ま す ) を 読 み 込 む こ と が で き ま す 。

/dev/user こ の フ ァ イ ル を 読 む こ と で 、 改 行 で 終 わ る 単 一 の レ コ ー ド が 得 ら れ ま す 。 各 フ ィ ー ル ド は 空 白 で 区 切 ら れ て い ま す 。

$1getuid(2) シ ス テ ム コ ー ル の 値 、 $2geteuid(2) シ ス テ ム コ ー ル の 値 、 $3getgid(2) シ ス テ ム コ ー ル の 値 、 $4getegid(2) シ ス テ ム コ ー ル の 値 で す 。 も し 、 さ ら に フ ィ ー ル ド が あ れ ば 、 そ れ は getgroups(2) シ ス テ ム コ ー ル が 返 す グ ル ー プ ID の リ ス ト で す 。 全 て の シ ス テ ム で 複 数 の グ ル ー プ が サ ポ ー ト さ れ て い る わ け で は あ り ま せ ん 。

/dev/stdin 標 準 入 力 。

/dev/stdout 標 準 出 力 。

/dev/stderr 標 準 エ ラ ー 出 力 。

/dev/fd/n オ ー プ ン さ れ た フ ァ イ ル デ ィ ス ク リ プ タ

n に 対 応 し て い る フ ァ イ

ル 。 エ ラ ー メ ッ セ ー ジ を 出 力 す る に は 、 以 下 の 方 法 が 便 利 で す 。

print "You blew it!" > "/dev/stderr" も し こ の 機 能 が 無 か っ た ら 、 次 の よ う に す る し か な い と こ ろ で す 。

print "You blew it!" | "cat 1>&2" こ れ ら の フ ァ イ ル 名 は 、 コ マ ン ド ラ イ ン の デ ー タ フ ァ イ ル 指 定 で 使 う こ と も で き ま す 。 数 値 関 数

AWK は 以 下 の 定 義 済 み 数 値 関 数 を 持 っ て い ま す 。

atan2(y, x)

y/x の 逆 正 接 を ラ ジ ア ン で 与 え ま す 。

cos(expr)

expr の 余 弦 を ラ ジ ア ン で 与 え ま す 。

exp(expr)

指 数 関 数 。

int(expr) 整 数 へ の 切 捨 て 。

log(expr) 自 然 対 数 。

rand()

0 か ら 1 の 間 の 乱 数 を 与 え ま す 。

sin(expr)

expr の 正 弦 を ラ ジ ア ン で 与 え ま す 。

sqrt(expr)

平 方 根 。

srand([expr])

expr の 値 を 乱 数 生 成 関 数 の 種 と し て 用 い ま す 。 式 が 指 定 さ れ な か っ た 場 合 は 、 時 刻 が 用 い ら れ ま す 。 直 前 の 種 の 値 を 返 し ま す 。

文 字 列 関 数

gawk は 以 下 の 定 義 済 み 文 字 列 関 数 を 持 っ て い ま す 。

gensub(r, s, h [, t]) 対 象 文 字 列

t か ら 正 規 表 現 r の マ ッ チ を 探 し ま

す 。 hg ま た は G で 開 始 す る 文 字 列 の 場 合 、 マ ッ チ す る r を す べ て s に 置 き 換 え ま す 。 そ う で な い 場 合 、 h は 何 番 目 の r の マ ッ チ を 置 き 換 え る の か を 示 し ま す 。 t が 与 え ら れ な い 場 合 、 代 り に $0 が 使 用 さ れ ま す 。 置 換 テ キ ス ト s で は 、 シ ー ケ ン ス \n た だ し n は 1 か ら 9 ま で の 数 字 を 使 用 し て 、 n 番 目 に マ ッ チ し た 括 弧 付 き サ ブ 式 を 示 す こ と が で き ま す 。 シ ー ケ ン ス \0 は 文 字 & と 同 様 、 マ ッ チ し た テ キ ス ト 全 体 を 表 し ま す 。 sub()gsub() と は 異 な り 、 修 正 さ れ た 文 字 列 が 関 数 の 結 果 と し て 返 さ れ 、 元 の 対 象 テ キ ス ト は 変 更 さ れ ま せ ん

gsub(r, s [, t]) 文 字 列

t 中 で 正 規 表 現 r に マ ッ チ し た 部 分 を す べ

s に 置 換 し ま す 。 置 換 の 個 数 を 返 し ま す 。 t を 指 定 し な か っ た 場 合 は $0 が 用 い ら れ ま す 。 置 換 テ キ ス ト で は 、 & は 実 際 に マ ッ チ し た テ キ ス ト で 置 き 換 え ら れ ま す 。 \& を 使 用 す る と リ テ ラ ル の & を 得 る こ と が で き ま す 。 sub(), gsub(), gensub() に お け る & と バ ッ ク ス ラ ッ シ ュ に 関 す る 完 全 な 議 論 は Effective AWK Language Programming を 参 照 し て く だ さ い 。

index(s, t) 文 字 列

s 中 に 含 ま れ る 文 字 列 t の 位 置 を 返 し ま

す 。 t が 含 ま れ て い な い 場 合 は 0 を 返 し ま す 。

length([s]) 文 字 列

s の 長 さ を 返 し ま す 。 s を 指 定 し な か っ た

場 合 に は $0 の 長 さ を 返 し ま す 。

match(s, r) 文 字 列

s 中 で 正 規 表 現 r に マ ッ チ す る 位 置 を 返 し

ま す 。 マ ッ チ し な い 場 合 は 0 を 返 し ま す 。 RSTARTRLENGTH の 値 が 設 定 さ れ ま す 。

split(s, a [, r]) 文 字 列

s を 正 規 表 現 r を 用 い て 分 割 し 、 配 列 a

格 納 し ま す 。 フ ィ ー ル ド 数 を 返 し ま す 。 r が 省 略 さ れ た 場 合 は FS が 用 い ら れ ま す 。 配 列 a の 内 容 は 、 分 割 前 に ク リ ア さ れ ま す 。 分 割 は 、 上 述 の フ ィ ー ル ド 分 割 と 同 じ 動 作 を 行 い ま す 。

sprintf(fmt, expr-list) 書 式

fmt に 従 っ て exp-list を 整 形 表 示 し 、 結 果 の

文 字 列 を 返 し ま す 。

sub(r, s [, t])

gsub() と 似 て い ま す が 、 最 初 に マ ッ チ し た 文 字 列 の み が 置 換 さ れ ま す 。

substr(s, i [, n])

文 字 列 si 文 字 目 か ら 始 ま る 最 大 n 文 字 の 部 分 文 字 列 を 返 し ま す 。 n が 省 略 さ れ た 場 合 、 i 文 字 目 以 降 の 部 分 文 字 列 が 返 さ れ ま す 。

tolower(str)

文 字 列 str を コ ピ ー し 、 大 文 字 を す べ て 小 文 字 に 変 換 し た も の を 返 し ま す 。 ア ル フ ァ ベ ッ ト で な い 文 字 は 変 化 し ま せ ん 。

toupper(str)

文 字 列 str を コ ピ ー し 、 小 文 字 を す べ て 大 文 字 に 変 換 し た も の を 返 し ま す 。 ア ル フ ァ ベ ッ ト で な い 文 字 は 変 化 し ま せ ん 。 時 間 関 数 タ イ ム ス タ ン プ を 含 ん だ ロ グ フ ァ イ ル の 処 理 は AWK プ ロ グ ラ ム の 主 な 使 い 道 の 1つ で す か ら 、 gawk は タ イ ム ス タ ン プ を 取 り 出 し た り 、 フ ォ ー マ ッ ト す る た め の 2 つ の 関 数 を 提 供 し ま す 。

systime() 基 準 時 点 か ら の 経 過 秒 数 を 返 し ま す

( POSIX シ ス テ ム で は 、 基 準 時 点 は UTC で 1970 年 1 月 1 日 0:00 で す )。

strftime([format [, timestamp]]) 書 式 format に 従 っ て timestamp を フ ォ ー マ ッ ト し ま す 。 timestampsystime() が 返 す 値 と 同 じ 形 式 で な け れ ば な り ま せ ん 。 timestamp が 省 略 さ れ た 場 合 、 現 在 の 日 付 が 使 用 さ れ ま す 。 format が 省 略 さ れ た 場 合 、 date(1) が 出 力 に 使 用 す る も の と 同 じ デ フ ォ ル ト フ ォ ー マ ッ ト が 使 用 さ れ ま す 。 利 用 可 能 な フ ォ ー マ ッ ト に つ い て は 、 ANSI C の strftime() 関 数 の 仕 様 を 参 照 し て 下 さ い 。 パ ブ リ ッ ク ド メ イ ン な strftime(3) と そ の マ ニ ュ ア ル ペ ー ジ が gawk と と も に 配 布 さ れ て い ま す 。 も し 、 gawk を 作 成 す る た め に そ の strftime を 用 い た 場 合 は 、 そ の マ ニ ュ ア ル に 記 述 さ れ て い る 変 換 書 式 が gawk で も 利 用 可 能 で す 。 文 字 列 定 数
AWK
で の 文 字 列 定 数 は 、 ダ ブ ル ク ォ ー ト (") に 狭 ま れ た 文 字 の 列 で す 。 文 字 列 内 で は 、 C 言 語 の よ う に い く つ か の エ ス ケ ー プ シ ー ケ ン ス が 使 え ま す 。

\\ バ ッ ク ス ラ ッ シ ュ そ の も の 。

\a 「 警 告 」 文 字 。 通 常 は

ASCII BEL 文 字 で す 。

\b バ ッ ク ス ペ ー ス 。

\f 改 ペ ー ジ

(フ ォ ー ム フ ィ ー ド )。

\n 改 行 。

\r 復 帰

(キ ャ リ ッ ジ リ タ ー ン )。

\t 水 平 タ

ブ 。

\v 垂 直 タ ブ 。

\xhex digits

\x に 続 く 16 進 数 で 表 現 さ れ た 文 字 。 ANSI C と 同 様 に 、 \x に 続 く す べ て の 16 進 数 字 は エ ス ケ ー プ シ ー ケ ン ス の 一 部 で あ る と み な さ れ ま す 。 (こ の 機 能 に よ り コ ミ ッ テ ィ に よ る 言 語 デ ザ イ ン が 分 か り ま す 。 ) 例 え ば 、 "\x1B"ASCII ESC (エ ス ケ ー プ ) 文 字 で す 。

\ddd

1 桁 か 2 桁 か 3 桁 の 8 進 数 で 表 現 さ れ た 文 字 。 例 え ば 、 "\033"ASCII ESC (エ ス ケ ー プ ) 文 字 で す 。

\c

文 字 c そ の も の 。 エ ス ケ ー プ シ ー ケ ン ス は 正 規 表 現 定 数 内 で も 用 い る こ と が で き ま す (例 え ば 、 /[ \t\f\n\r\v]/ は 空 白 文 字 に マ ッ チ し ま す )。 互 換 モ ー ド で は 、 8 進 お よ び 16 進 の エ ス ケ ー プ シ ー ケ ン ス で 表 現 さ れ る 文 字 は 、 正 規 表 現 定 数 と し て 使 用 さ れ た 場 合 、 リ テ ラ ル と し て 扱 わ れ ま す 。 そ れ ゆ え 、 /a\52b//a\*b/ と 等 価 で す 。

関 数

AWK で は 関 数 を 以 下 の よ う に し て 定 義 し ま す 。

function name(parameter list) { statements } 関 数 は 、 パ タ ー ン ま た は ア ク シ ョ ン の 式 か ら 呼 び 出 さ れ た と き に 実 行 さ れ ま す 。 関 数 呼 び 出 し に お い て 与 え ら れ た 実 引 数 が 、 関 数 宣 言 に お け る 仮 引 数 に 受 け 渡 さ れ ま す 。 こ の と き 配 列 の 場 合 は 参 照 渡 し が 行 わ れ 、 他 の 変 数 の 場 合 は 値 渡 し で 行 わ れ ま す 。 元 々 AWK に 関 数 は 備 わ っ て い ま せ ん で し た の で 、 局 所 変 数 の 機 構 は あ ま り ス マ ー ト で は あ り ま せ ん 。 局 所 変 数 は 引 数 リ ス ト の 余 分 な 引 数 と し て 宣 言 し ま す 。 局 所 変 数 と 関 数 引 数 を 区 別 す る た め 、 余 分 な 空 白 で 区 切 る の が 慣 習 で す 。 例 え ば 、 以 下 の よ う に し ま す 。

function f(p, q, a, b) # a & b は 局 所 変 数
{

... }

/abc/

{ ... ; f(1, 2) ; ... } 関 数 呼 び 出 し に お け る 左 括 弧 は 、 空 白 を 狭 ま ず に 関 数 名 の 直 後 に 置 か な け れ ば い け ま せ ん 。 こ れ は 、 文 字 列 結 合 演 算 子 と の 曖 昧 さ を 生 じ さ せ な い た め に 必 要 で す 。 こ の 制 限 は 、 上 述 の 組 み 込 み 関 数 に は あ て は ま り ま せ ん 。 関 数 は 、 他 の 関 数 を 呼 び 出 し た り 、 自 分 自 身 を 再 帰 的 に 呼 び 出 す こ と が で き ま す 。 局 所 変 数 と し て 用 い ら れ る 関 数 引 数 は 、 関 数 起 動 時 に 空 文 字 列 お よ び 0 に 初 期 化 さ れ ま す 。 関 数 か ら 値 を 返 す に は return expr を 使 用 し て く だ さ い 。 値 を 指 定 し な い 場 合 、 ま た は 関 数 の 終 り か ら “落 ち る ” (訳 注 : 関 数 を 閉 じ る ブ レ ー ス に 到 達 す る ) こ と に よ り 関 数 か ら 戻 る 場 合 、 値 は 未 定 義 で す 。

−−lint が 指 定 さ れ た と き 、 gawk は 実 行 時 で は な く パ ー ズ 時 に 未 定 義 関 数 の 呼 び 出 し に 関 し て 警 告 し ま す 。 実 行 時 の 未 定 義 関 数 の 呼 び 出 し は 致 命 的 な エ ラ ー と な り ま す 。

function の か わ り に func を 用 い る こ と が で き ま す 。

使 用 例

“/etc/passwd” か ら 全 ユ ー ザ の ロ グ イ ン 名 を 取 り 出 し 、 ソ ー ト し て 出 力 し ま す 。

BEGIN

{ FS = ":" }

{ print $1 | "sort" } フ ァ イ ル の 行 数 を 数 え る 。

{ nlines++ }

END

{ print nlines } 行 番 号 を つ け る 。

{ print FNR, $0 } 全 フ ァ イ ル を 通 し た 行 番 号 を つ け る 。

{ print NR, $0 }

関 連 項 目

egrep(1), getpid(2), getppid(2), getpgrp(2), getuid(2), geteuid(2), getgid(2), getegid(2), getgroups(2)

The AWK Programming Language, Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988. ISBN 0-201-07981-X.

Effective AWK Language Programming, Edition 1.0, published by the Free Software Foundation, 1995.

POSIX 互 換

gawk は 最 新 版 の UNIX awk と の 互 換 性 だ け で な く 、 POSIX 標 準 と の 互 換 性 も 追 求 し て い ま す 。 こ の た め gawk に は 以 下 の よ う な 機 能 が 取 り 入 れ ら れ て い ま す 。 こ れ ら の 機 能 は AWK 本 に は 述 べ ら れ て い ま せ ん が 、 Bell Labs お よ び POSIX 標 準 の awk が 有 し て い る 機 能 で す 。 プ ロ グ ラ ム 実 行 前 に 変 数 代 入 を 行 な う −v オ プ シ ョ ン は 新 し い 物 で す 。 AWK 本 に よ れ ば 、 コ マ ン ド ラ イ ン で 指 定 さ れ た 変 数 代 入 は awk が 引 数 を フ ァ イ ル 名 と し て オ ー プ ン す る 際 に 行 な わ れ る こ と に な り ま す 。 つ ま り こ れ は BEGIN ブ ロ ッ ク の 実 行 後 で す 。 し か し な が ら 初 期 の 頃 の 実 装 で は 、 引 数 の 中 で フ ァ イ ル 名 に 先 立 っ て 変 数 代 入 が 指 定 さ れ て い る 場 合 に は 、 代 入 は BEGIN ブ ロ ッ ク 実 行 の 前 に 行 わ れ て い ま し た 。 そ し て ア プ リ ケ ー シ ョ ン は 、 こ の 「 仕 様 」 に 依 存 す る よ う に な り ま し た 。 awk が そ の ド キ ュ メ ン ト に 合 う よ う に 直 さ れ た 時 、 昔 の 動 作 に 依 存 し て い る ア プ リ ケ ー シ ョ ン の 便 宜 を 図 る た め に こ の オ プ シ ョ ン が 加 え ら れ ま し た 。 (こ の 仕 様 は AT&T お よ び GNU の 開 発 者 達 に よ っ て 合 意 さ れ ま し た 。 ) 独 自 機 能 の た め の −W オ プ シ ョ ン は POSIX 標 準 に 従 っ た も の で す 。 引 数 の 列 に 特 別 な オ プ シ ョ ン “−−” を 指 定 す る と 、 gawk は そ こ が オ プ シ ョ ン の 終 わ り で あ る と 解 釈 し ま す 。 互 換 モ ー ド に お い て は 未 定 義 オ プ シ ョ ン は 警 告 が 出 力 さ れ 、 そ れ 以 外 の も の は 無 視 さ れ ま す 。 通 常 の 実 行 に お い て は 残 り の 引 数 は AWK プ ロ グ ラ ム に 引 き 渡 さ れ ま す 。

AWK 本 は srand() の 返 り 値 を 定 義 し て い ま せ ん 。 POSIX 標 準 で は 、 そ の 関 数 が 使 っ て い る 種 を 返 し 、 乱 数 シ ー ケ ン ス を 追 跡 で き る よ う に し て い ま す 。 し た が っ て gawk に お け る srand() も 現 在 の 種 を 返 す よ う に し て あ り ま す 。 そ の 他 に も 以 下 の よ う な 新 機 能 が あ り ま す 。 −f オ プ シ ョ ン の 複 数 回 使 用 (MKS awkに 倣 い ま し た ); ENVIRON 配 列 ; エ ス ケ ー プ シ ー ケ ン ス \a\v ( gawk で 最 初 に 実 装 さ れ 、 AT&T の awk に フ ィ ー ド バ ッ ク さ れ ま し た ); 組 み 込 み 関 数 tolower()toupper() (AT&T に 倣 い ま し た ); printf に お け る ANSI C 変 換 指 定 (AT&T 版 で 最 初 に 実 装 さ れ ま し た )。

GNU 拡 張

gawkPOSIX awk に 対 し て 多 く の 拡 張 が 行 な わ れ て い ま す 。 こ の 節 で は そ れ ら に つ い て 解 説 し ま す 。 −−traditional オ プ シ ョ ン 付 き で gawk を 起 動 す る こ と に よ っ て 、 こ こ で 述 べ ら れ て い る 拡 張 機 能 を す べ て 禁 止 す る こ と が で き ま す 。

gawk が 持 つ 以 下 の 機 能 は POSIX awk で は 使 用 で き ま せ ん 。

• エ ス ケ ー プ シ ー ケ ン ス

\x 。 ( −−posix で 抑 止 で き ま す 。 )

fflush() 関 数 。 ( −−posix で 抑 止 で き ま す 。 )

systime(), strftime(), gensub() の 各 関 数 。

入 出 力 リ ダ イ レ ク ト で 利 用 可 能 な 特 殊 フ ァ イ ル 名 は 理 解 さ れ ま せ ん 。

• 変 数

ARGIND, ERRNO, RT は 特 殊 変 数 で は あ り ま せ ん 。

• 変 数

IGNORECASE と そ の 副 作 用 は 利 用 で き ま せ ん 。

• 変 数

FIELDWIDTHS と 固 定 長 フ ィ ー ル ド 分 割 。

RS の 正 規 表 現 と し て の 使 用 。

FS に 空 文 字 列 を 設 定 す る こ と に よ り 各 文 字 を 切 り 出 す 能 力 と 、 split() の 3 番 目 の 引 数 。

−f オ プ シ ョ ン で 指 定 さ れ た フ ァ イ ル 名 に つ い て パ ス 検 索 を 行 わ な い こ と 。 よ っ て 、 環 境 変 数 AWKPATH は 特 殊 な 変 数 で は あ り ま せ ん 。

現 在 の 入 力 フ ァ イ ル に 対 す る 処 理 を 終 わ ら せ る た め に 使 用 さ れ る nextfile

配 列 全 体 を 削 除 す る た め に 使 用 さ れ る delete 配 列

AWK 本 は 関 数 close() の 返 り 値 を 定 義 し て い ま せ ん 。 gawkclose() は 、 フ ァ イ ル や パ イ プ を ク ロ ー ズ す る 際 に 呼 び 出 す fclose(3)pclose(3)、 か ら の 返 り 値 を 返 し ま す 。 オ プ シ ョ ン −−traditional 付 き で gawk を 起 動 し −F オ プ シ ョ ン へ の 引 数 fs と し て “t” を 与 え た 場 合 に 、 FS の 値 は タ ブ 文 字 に 設 定 さ れ ま す 。 gawk −F\t ... と タ イ プ し て も 、 シ ェ ル が 単 に “t” を ク ォ ー ト す る の で 、 “\t” は −F オ プ シ ョ ン に 渡 さ れ ま せ ん 。 こ れ は 少 々 見 苦 し い 特 殊 事 例 で す の で 、 デ フ ォ ル ト の 動 作 と し て は 採 用 さ れ て い ま せ ん 。 −−posix を 指 定 し た 場 合 に も 、 こ の 動 作 は 行 な わ れ ま せ ん 。 タ ブ 文 字 を フ ィ ー ル ド セ パ レ ー タ と し て 使 用 し た い 場 合 に は 、 ク ォ ー ト を 使 用 す る の が 最 良 で す : gawk −F’\t’ ....

歴 史 的 機 能

gawk は 歴 代 の AWK の 実 装 に あ っ た 2 つ の 機 能 を 備 え て い ま す 。 1 つ め と し て 、 組 み 込 み 関 数 length() は 引 数 無 し で 呼 び 出 せ る だ け で な く 、 さ ら に 括 弧 無 し で も 呼 び 出 せ ま す ! し た が っ て

a = length # Holy Algol 60, Batman! は 以 下 の 2例 と 同 じ で す 。

a = length()
a = length($0)

POSIX 標 準 で は こ の 機 能 は “deprecated” と 注 意 書 き さ れ て お り 、 gawk で は コ マ ン ド ラ イ ン で −−lint を 指 定 し た 場 合 に 、 こ の 機 能 の 使 用 に 対 し て 警 告 を 出 力 し ま す 。 も う 1 つ は 、 while, for, do ル ー プ 本 体 の 外 で も continue, break ス テ ー ト メ ン ト を 使 用 で き る と い う 機 能 で す 。 伝 統 的 な AWK の 実 装 で は 、 こ の よ う に 使 用 し た continue ス テ ー ト メ ン ト を next ス テ ー ト メ ン ト と 等 価 な も の と し て 扱 っ て き ま し た 。 gawk で は −−traditional が 指 定 さ れ た 場 合 に 、 こ の 機 能 を 使 う こ と が で き ま す 。

環 境 変 数

環 境 に POSIXLY_CORRECT が 存 在 す る 場 合 に は 、 gawk は コ マ ン ド ラ イ ン で −−posix が 指 定 さ れ て い る 時 と 全 く 同 じ 動 作 を し ま す 。 こ の と き −−lint が 指 定 さ れ て い る と gawk は こ の 作 用 に つ い て の 警 告 メ ッ セ ー ジ を 出 力 し ま す 。

AWKPATH 環 境 変 数 を 使 用 し て 、 gawk−f お よ び −−file オ プ シ ョ ン で 指 定 さ れ た フ ァ イ ル 名 を 検 索 す る デ ィ レ ク ト リ を 指 定 で き ま す 。

バ グ

コ マ ン ド ラ イ ン で の 変 数 代 入 機 能 を 使 用 す る に は 、 変 数 へ の 代 入 を 直 接 コ マ ン ド ラ イ ン に 書 け ば よ く 、 −F オ プ シ ョ ン を つ け る 必 要 は あ り ま せ ん 。 こ の オ プ シ ョ ン は 昔 の awk と の 互 換 性 の た め だ け に 残 さ れ て い ま す 。 フ ァ イ ル /dev/fd お よ び /dev/stdin, /dev/stdout, /dev/stderr を 実 際 に サ ポ ー ト し て い る シ ス テ ム で の gawk か ら は 、 そ れ ら が な い シ ス テ ム と は 違 っ た 出 力 が 得 ら れ る か も し れ ま せ ん 。 gawk は そ れ ら の フ ァ イ ル を 内 部 で 解 釈 す る 際 に 標 準 出 力 へ の 出 力 を /dev/stdout へ の 出 力 と 同 期 さ せ ま す が 、 そ れ ら の フ ァ イ ル を 持 つ シ ス テ ム で は 出 力 は そ れ ぞ れ 異 な る フ ァ イ ル へ 向 け ら れ ま す 。 利 用 者 の 方 で 気 を 付 け る よ う に し て く だ さ い (Caveat Emptor)。 文 法 的 に 誤 っ た 単 一 文 字 プ ロ グ ラ ム は パ ー ズ ス タ ッ ク を 溢 れ さ せ る 傾 向 が あ り 、 ま っ た く 分 か ら な い メ ッ セ ー ジ を 生 成 す る 傾 向 に あ り ま す 。 こ の よ う な プ ロ グ ラ ム の 診 断 は 驚 く べ き こ と に 一 般 に 難 し く 、 診 断 の 努 力 は ま っ た く 無 意 味 に な り ま す 。

バ ー ジ ョ ン 情 報

こ の マ ニ ュ ア ル は gawk バ ー ジ ョ ン 3.0.6 に つ い て 記 載 し て い ま す 。

作 者

UNIX awk の 最 初 の バ ー ジ ョ ン は 、 AT&T Bell Labs の Alfred Aho と Peter Weinberger お よ び Brian Kernighan に よ っ て 設 計 、 実 装 さ れ ま し た 。 Brian Kernighan は そ の 保 守 と 改 良 を 続 け て い ま す 。

Free Software Foundation の Paul Rubin と Jay Fenlason が 、 Seventh Edition UNIX で 配 布 さ れ た 最 初 の バ ー ジ ョ ン の awk と 互 換 性 を 持 つ よ う に gawk を 書 き ま し た 。 John Woods は 数 々 の バ グ 修 正 を 送 っ て 下 さ い ま し た 。 David Trueman は 、 Arnold Robbins が 送 っ て 下 さ っ た 内 容 を も と に 、 gawk を 新 バ ー ジ ョ ン の UNIX awk 互 換 に し ま し た 。

DOS へ の 最 初 の 移 植 は Conrad Kwok と Scott Garfinkle に よ っ て 行 な わ れ ま し た 。 現 在 は Scott Deifik が DOS 版 の 保 守 を し て い ま す 。 Pat Rankin は VMS へ の 移 植 を 行 な い 、 Michal Jaegermann は Atari ST へ の 移 植 を 行 な い ま し た 。 OS/2 へ の 移 植 は Kai Uwe Rommel が Darrel Hankerson の 助 け を 借 り て 行 な い ま し た 。 Fred Fish が Amiga サ ポ ー ト の 提 供 を 行 い ま し た 。

バ グ レ ポ ー ト

gawk の バ グ を 見 付 け た ら 、 電 子 メ ー ル を bug-gawk [AT] gnu.org 宛 に 送 っ て く だ さ い 。 電 子 メ ー ル に は 、 オ ペ レ ー テ ィ ン グ シ ス テ ム と そ の リ ビ ジ ョ ン 、 gawk の リ ビ ジ ョ ン 、 コ ン パ イ ル に 使 用 し た C コ ン パ イ ラ 、 問 題 を 再 現 す る で き る だ け 小 さ な テ ス ト プ ロ グ ラ ム と デ ー タ を 記 述 し て く だ さ い 。 バ グ レ ポ ー ト を 送 る 前 に 2 つ の こ と を 行 っ て く だ さ い 。 第 1 に 、 最 新 の gawk を 使 用 さ れ て い る こ と を 確 認 し て く だ さ い 。 多 く の (通 常 微 妙 な ) バ グ が 各 々 の リ リ ー ス で 修 正 さ れ て い ま す の で 、 ご 使 用 の も の が 古 い 場 合 に は 問 題 は 既 に 解 決 さ れ て い る か も し れ ま せ ん 。 第 2 に 、 こ の マ ニ ュ ア ル ペ ー ジ と リ フ ァ レ ン ス マ ニ ュ ア ル を 注 意 深 く 読 み 、 あ な た が バ グ だ と 思 う も の が 確 か に バ グ で あ り 、 大 き く 変 わ っ た 言 語 仕 様 で は な い こ と を 確 認 し て く だ さ い 。 バ グ レ ポ ー ト を comp.lang.awk に 投 稿 す る こ と だ け は し な い で く だ さ い 。 gawk の 開 発 者 達 は 時 々 こ の ニ ュ ー ス グ ル ー プ を 読 み ま す が 、 バ グ レ ポ ー ト を こ の ニ ュ ー ス グ ル ー プ に 投 稿 し て も バ グ レ ポ ー ト と し て 信 頼 性 が あ り ま せ ん 。 上 記 の ア ド レ ス へ の 電 子 メ ー ル で お 願 い し ま す 。

謝 辞

Bell Labs の Brian Kernighan は テ ス ト お よ び デ バ ッ グ の 間 、 貴 重 な 助 力 を 提 供 し て 下 さ い ま し た 。 感 謝 致 し ま す 。

COPYING PERMISSIONS

Copyright © 1996−2000 Free Software Foundation, Inc.

Permission is granted to make and distribute verbatim copies of this manual page provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this manual page under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual page into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Foundation.