awkについての覚え書き2 〜 オプションと組み込み変数編 〜

awk

前回の1に続いて今回はその2になりますと

前回書いてなかったものの awk の確認環境は次のバージョンを使用

#47~20.04.2-Ubuntu

awk 自体のバージョンはこちらを最新として使用

Version 1.3.4



それとしつこいかもですが

awk は処理する読込対象のファイルだろうが文字列だろうが1処理毎に見るのは1行分ずつです

この前提を忘れているとちょっと混乱することもあるかなと思ったので忘れないようにメモ書き

さてそれでは

awkに存在するオプション

オプション意味使用例備考
-F区切り文字を指定する(指定なければ空白)-F[区切り文字]指定文字列は-Fにくっつけて指定する
また”などは’で囲む(’なら”で囲む)
複数同時指定も可
-fawkスクリプトが書かれたファイルを指定する-f [ファイル名]
-v変数を定義する-v [変数名]=[値]外部からawk内部に渡すための変数インポート
定義したい変数の数だけ-vを繋げる必要有り

※あくまでも基本として記載(gawk の対象は未掲載)

区切り文字の指定は基本的に ‘(シングルコーテーション)か “(ダブルコーテーション)で括っとくのが無難

-v の変数名は awk 本体の中でそのまま使用できます

ただ何個も外部から変数を定義する場合は -v [変数名]=[値] -v [変数名]=[値]…と冗長するのが難点かな



awk の組み込み変数

これは awk 自身が処理する前からすでに内部で設定していたり

または処理中に設定値を内部で更新しながら保持してくれる変数値になります

登場バージョン最新awk使用可不可変数名説明
awkFILENAME現在処理しているファイルの名前
awkFSフィールドの区切り文字
(-Fオプションで変更可能、デフォルトはスペース)
awkNF現在処理しているレコードのフィールド最大数
awkNR現在処理しているレコード番号(行番号)
処理ファイルの対象が複数ある場合は累積処理数
awkOFMT数値の出力時 / 文字列変換時の形式(デフォルトは”%.6g”)
awkOFS出力時のフィールドの区切り(デフォルトは空白)
awkORS出力時のレコードの区切り(デフォルトは改行)
awkRSレコードの区切り(デフォルトは改行)
awk$0入力レコード全体
awk$n現在処理しているレコードのn番目のフィールド
フィールドはFSによって区切られる
nawkARGC引数の個数
nawkARGV引数(配列)
nawkCONVFMT数値の文字列変換形式
(デフォルトは”%.6g”)(POSIX)
nawkENVIRON環境変数を収めた連想配列
例えば環境変数LANGならばENVIRON[“LANG”]と参照できる
nawkFNR現在処理しているファイルのレコード番号
(処理しているファイルが1つの場合はNRと同じ値になる)
nawkRLENGTHmatch()関数でマッチした文字列の長さ
nawkRSTARTmatch()関数でマッチした文字列中の最初の位置
nawkSUBSEP配列添字の区切り文字(デフォルトは”\034″)
gawkARGIND現在の入力ファイルのARGVインデックス
gawkERRNOgetlineのリダイレクトが失敗したりclose()が失敗した場合に取得するエラーを示す文字列
gawkFIELDWIDTHS入力フィールドの長さを表す
区切られたフィールドの数値のリスト
レコードを分割する際にFSの代わりに使われる
gawkIGNORECASE真の場合にはすべての正規表現マッチングと文字列比較とindex()の実行時に大文字小文字の区別を無視する
gawkRTRS(gawkでは正規表現で指定可)によってマッチした文字列

※最新の使用可不可が「-」は未確認

最新の awk は過去枝分かれリリースされた nawk などの機能も取り込んでいる模様

gawkのところは元々 Windows 向けだったはずだからかあまり取り込んでる雰囲気は感じなさそう、、、





どのような結果になるかの簡単な例はここに掲載予定、、、
後日更新


コメント