2010年8月2日月曜日

SUBSEP = 配列の添え字の区切り文字 - AWK

AWKの配列操作関数と関連機能
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
配列の添え字の区切り文字です。変更する事も出来ます。


**** 書式
--------
SUBSEP
もしくは
SUBSEP = "配列の区切り文字";
--------

o SUBSEPは変数です。初期値は"\034"です。(= 16進数表現では 0x1C。制御文字の1つです。)
o 配列の区切り文字 -- 2文字以上指定する事も出来ます。


**** 使用例
--------
BEGIN {
  a["ミク#呼び方"] = "ミクさん";
  SUBSEP = "#";
  print a["ミク", "呼び方"]; # 表示は「ミクさん」

  SUBSEP = "さんの";
  b["ミク", "挨拶"] = "おはよー♪";
  print b["ミクさんの挨拶"]; # 表示は「おはよー♪」
}
--------

o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。


**** 機能
o 配列の添え字です。
o 値を変更すると、直ちに反映されます。
o 文字列を指定する事も出来ます。
   +「SUBSEP = "あいうえおかきくけこさしすせそたちつてと";」としても、大丈夫でした。


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3
o Mawk for Windows 1.3.3
o original = the one true awk(updated May 1, 2007)


==
関連ページ:
    ▼AWKの配列操作関数と関連機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    +
    配列を使う時の注意点まとめ
    delete = 配列の要素を削除する
    OFS = print文を使って出力する時の列区切り文字

delete = 配列の要素を削除する - AWK

AWKの配列操作関数と関連機能
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
配列の要素を削除します。

o 配列の要素1つを削除出来ます。
o 全要素を一括削除する事も、出来ます。


**** 書式
--------
delete 配列の名前
もしくは
delete 配列の要素
--------

o 配列の名前 -- 変数名です。
o 配列の要素 -- a[2] のように、添え字まで指定します。


**** 使用例
--------
BEGIN {
  a[1] = "ミクさん";
  a[2] = "ネギ";
  a[39] = "ミクさん";
  delete a[1];

  for (i in a) {
    print "a[" i "] = " a[i];
  }
}
--------

o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。


**** 機能
o 配列を指定した時は、その配列を、要素が無い状態に初期化します。
o 配列の要素を指定した時は、その要素を、配列から削除します。
o 配列そのものを削除する訳ではありません。


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3
o Mawk for Windows 1.3.3
o original = the one true awk(updated May 1, 2007)


==
関連ページ:
    ▼AWKの配列操作関数と関連機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > asort = 配列の要素を並び替える(Gawk専用)
    asorti = 配列の添え字を取り出して並び替える(Gawk専用)
    SUBSEP = 配列の添え字の区切り文字
    +
    配列を使う時の注意点まとめ

配列を使う時の注意点まとめ - AWK

AWKの配列操作関数と関連機能
** 配列の基本操作について
o 多次元配列を使いたい時は、カンマで区切ります。(例。a[1,2])
o 配列の添え字は、代入だけでなく、使用時にも自動設定されます。
   + 「値が無いかなあ」と、print a[2]; のような書き方をすると、a[2]が定義されます。
    + 値は空です。でも、後で for文を使って添え字を取り出すような時には、ご注意下さい。

** AWKで出来ない事
o 変数の再利用について、制限があります。
   + 配列にした変数は、その後、配列以外の目的で再利用する事が出来ません。
   + 配列以外の目的で使った変数は、配列として再利用する事は出来ません。
o 配列Aを配列Bに直接代入する事は出来ません。
   + 必要な時は、要素を1つずつコピーします。詳しくは「配列を代入、コピーする方法
o 配列Aを配列Bの要素にする事は出来ません。

** 関数における配列の扱いについて
o 関数の引数として配列を渡す時、その配列に書き込んだ結果は、呼び出し元にも伝わります。
o 関数の戻り値として、配列を渡す事は出来ません。


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3
o Mawk for Windows 1.3.3
o original = the one true awk(updated May 1, 2007)


==
関連ページ:
    ▼AWKの配列操作関数と関連機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > 配列を代入、コピーする
    length = 文字列や配列の長さを調べる
    delete = 配列の要素を削除する
    +
    SUBSEP = 配列の添え字の区切り文字
    数値計算関数使用時の注意点まとめ
    文字列操作関数使用時の注意点まとめ
    入出力とコマンド実行の注意点まとめ
    時刻取得関数を使う時の注意点まとめ
(2010年10月1日追加。配列を代入する方法)

# = コメントを入力する - AWK

AWKのパターンと制御文
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
コメントを入力します。

**** 書式
--------
# [コメント]
--------

o コメント -- 説明文などを入力します。
   + # と同じ行、かつ、# の右側にある時だけ有効です。


**** 使用例
--------
{
  gsub(/ミク/, "ミクさん"); # ミクさん登場
  # コメントだけ書く事も出来ます。
}
--------

o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。


**** 機能
o コメントを入力します。
o コメントは、# と同じ行に置きます。
   + 複数行にまたがる時は、それぞれの行に対して # が必要です。

o 但し、文字列中に出てきた # は、文字列の一部として扱います。
   + 機械的にコメントを除去する時は、ご注意下さい。


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3
o Mawk for Windows 1.3.3
o original = the one true awk(updated May 1, 2007)


==
関連ページ:
    ▼AWKのパターンと制御文▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > ARGC = ARGVに入っている要素の個数
    ARGV = AWK起動時に指定した入力ファイル名とコマンド名
    ARGIND = ARGVにおける現在入力中ファイルの位置(Gawk専用)

else = ifで実行しない時に実行する - AWK

AWKのパターンと制御文
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
先行する if の条件に一致しなかった時に実行します。
if文に付随する識別子です。

**** 書式
--------
if (条件) 真の時に実行する文 else 偽の時に実行する文
--------

o 以下、「if」の説明をご覧下さい


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3
o Mawk for Windows 1.3.3
o original = the one true awk(updated May 1, 2007)


==
関連ページ:
    ▼AWKのパターンと制御文▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > switch = 選択肢を選んで実行する
    case = switch文の中で、選択肢を指定する(Gawk専用)
    default = switch文の中で、全ての選択肢と一致しない時に実行する(Gawk専用)
    +
    if = 条件に一致したら実行する
(2010年8月24日変更。「条件式」=>「条件」。「条件式は真偽値のみ取る」との解説を見かけたので、その表現を避けた)

if = 条件に一致したら実行する - AWK

AWKのパターンと制御文
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
条件に一致したら実行します。一致しなかった時の実行文も書く事が出来ます。

**** 書式
--------
if (条件) 真の時に実行する文
もしくは
if (条件) 真の時に実行する文 else 偽の時に実行する文
--------

o 条件 -- 真偽を判定する式です。
   + 条件式の他に、数値や文字列を使う事も出来ます。
   + 1 や "a"など、何かが入っている時は、真になります。
   + 0 や "" の時は、偽になります。
o 真の時に実行する文 -- 空文や複文も指定出来ます。
   + 空文は、内容か空で、; (セミコロン)だけを書いた文です。
   + 複文は、{ と } で囲んだものです。中には複数の文を書く事が出来ます。
o 偽の時に実行する文 -- 空文や複文も指定出来ます。


**** 使用例
--------
{
  if ($0 ~ "ミク") {
    print FNR "行目にて、ミクさんを発見しました。";
    ++MikuCount;
  }
  else {
    print FNR "行目。見つかりませんでした。";
  }
}
END {
  print "# ミクさんは、" MikuCount "回登場しました。";
}
--------

o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。
o else の書き方は、プログラムの構造が一目で分かるものを選びました。


**** 機能
o 条件が真の時、「真の時に実行する文」を実行します。
o 条件が偽の時、else があると「偽の時に実行する文」を実行します。
o 条件を書かないと、エラーメッセージが表示されます。

if 文で良く使われる演算子
記号書き方意味
比較演算子
==A == BAがBと等しい時に真。比較の時は、等号を2つ並べます。
!=A != BAがBと等しくない時に真。
~ A ~ /B/Aの一部が、正規表現Bに一致した時に真。("ミクさん" ~/ミク/) は真
「~」キーは、キーボードの右上にあります。数字の「0」キーの2つ右「^」を、シフトキーを押しながら。
!~A !~ /B/Aが、正規表現Bに全く一致しなかった時に真。("ミクさん" !~/リン/) は真
> A > BAの方が大きい時に真
>=A >= BAの方が大きいか、等しい時に真
< A < BAの方が小さい時に真
<=A <= BAの方が小さいか、等しい時に真
論理演算子
&&A && BAとBの両方が真の時に真。別名AND
||A || BAとBのどちらかが真の時に真。別名OR
!!AAの反対。Aが偽の時に真


**** メモ
o 条件によって 2つの値のどちらかを入れる時は、条件演算子 ?: を使う書き方もあります。

**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3
o Mawk for Windows 1.3.3
o original = the one true awk(updated May 1, 2007)


==
関連ページ:
    ▼AWKのパターンと制御文▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > else = ifで実行しない時に実行する
    switch = 選択肢を選んで実行する(Gawk専用)
    case = switch文の中で、選択肢を指定する(Gawk専用)
    +
    ?: = 条件演算子
    for = 繰り返し文その2
(2010年8月27日追加。どちらかの値を入れる時は、条件演算子 ?:で置き換える事が出来る)
(2010年8月24日変更。「条件式」=>「条件」。「条件式は真偽値のみ取る」との解説を見かけたので、その表現を避けた)
(2010年8月23日追加。if文で良く使われる演算子として、論理演算子を追加)