前回の1に続いて今回はその2になりますと
前回書いてなかったものの awk の確認環境は次のバージョンを使用
#47~20.04.2-Ubuntu
awk 自体のバージョンはこちらを最新として使用
Version 1.3.4
それとしつこいかもですが
awk は処理する読込対象のファイルだろうが文字列だろうが1処理毎に見るのは1行分ずつです
この前提を忘れているとちょっと混乱することもあるかなと思ったので忘れないようにメモ書き
さてそれでは
awkに存在するオプション
オプション | 意味 | 使用例 | 備考 |
-F | 区切り文字を指定する(指定なければ空白) | -F[区切り文字] | 指定文字列は-Fにくっつけて指定する また”などは’で囲む(’なら”で囲む) 複数同時指定も可 |
-f | awkスクリプトが書かれたファイルを指定する | -f [ファイル名] | |
-v | 変数を定義する | -v [変数名]=[値] | 外部からawk内部に渡すための変数インポート 定義したい変数の数だけ-vを繋げる必要有り |
※あくまでも基本として記載(gawk の対象は未掲載)
区切り文字の指定は基本的に ‘(シングルコーテーション)か “(ダブルコーテーション)で括っとくのが無難
-v の変数名は awk 本体の中でそのまま使用できます
ただ何個も外部から変数を定義する場合は -v [変数名]=[値] -v [変数名]=[値]…と冗長するのが難点かな
awk の組み込み変数
これは awk 自身が処理する前からすでに内部で設定していたり
または処理中に設定値を内部で更新しながら保持してくれる変数値になります
登場バージョン | 最新awk使用可不可 | 変数名 | 説明 |
awk | ○ | FILENAME | 現在処理しているファイルの名前 |
awk | ○ | FS | フィールドの区切り文字 (-Fオプションで変更可能、デフォルトはスペース) |
awk | ○ | NF | 現在処理しているレコードのフィールド最大数 |
awk | ○ | NR | 現在処理しているレコード番号(行番号) 処理ファイルの対象が複数ある場合は累積処理数 |
awk | ○ | OFMT | 数値の出力時 / 文字列変換時の形式(デフォルトは”%.6g”) |
awk | ○ | OFS | 出力時のフィールドの区切り(デフォルトは空白) |
awk | ○ | ORS | 出力時のレコードの区切り(デフォルトは改行) |
awk | ○ | RS | レコードの区切り(デフォルトは改行) |
awk | ○ | $0 | 入力レコード全体 |
awk | ○ | $n | 現在処理しているレコードのn番目のフィールド フィールドはFSによって区切られる |
nawk | ○ | ARGC | 引数の個数 |
nawk | ○ | ARGV | 引数(配列) |
nawk | ○ | CONVFMT | 数値の文字列変換形式 (デフォルトは”%.6g”)(POSIX) |
nawk | ○ | ENVIRON | 環境変数を収めた連想配列 例えば環境変数LANGならばENVIRON[“LANG”]と参照できる |
nawk | ○ | FNR | 現在処理しているファイルのレコード番号 (処理しているファイルが1つの場合はNRと同じ値になる) |
nawk | – | RLENGTH | match()関数でマッチした文字列の長さ |
nawk | – | RSTART | match()関数でマッチした文字列中の最初の位置 |
nawk | – | SUBSEP | 配列添字の区切り文字(デフォルトは”\034″) |
gawk | – | ARGIND | 現在の入力ファイルのARGVインデックス |
gawk | – | ERRNO | getlineのリダイレクトが失敗したりclose()が失敗した場合に取得するエラーを示す文字列 |
gawk | – | FIELDWIDTHS | 入力フィールドの長さを表す 区切られたフィールドの数値のリスト レコードを分割する際にFSの代わりに使われる |
gawk | – | IGNORECASE | 真の場合にはすべての正規表現マッチングと文字列比較とindex()の実行時に大文字小文字の区別を無視する |
gawk | – | RT | RS(gawkでは正規表現で指定可)によってマッチした文字列 |
※最新の使用可不可が「-」は未確認
最新の awk は過去枝分かれリリースされた nawk などの機能も取り込んでいる模様
gawkのところは元々 Windows 向けだったはずだからかあまり取り込んでる雰囲気は感じなさそう、、、
どのような結果になるかの簡単な例はここに掲載予定、、、
後日更新
コメント