split = 文字列を分割する - AWK
○Gawk on Windows ○Gawk ○mawk32 △(全角不可)Mawk △(全角不可)awk
文字列を分割します。o 区切り文字を1文字だけ指定する時、処理系によって意味が変わります。
o 複数の環境でAWKを使う場合は、区切り文字 = aではなく、[a]もしくは[a\n]のように明示的に書く事をおすすめします。
**** 書式
--------
split( 分割対象文字列, 分割結果 [, 区切り文字] )
--------
o 分割対象文字列 -- 普通に指定します。
o 分割結果 -- 分割結果を入れる変数を指定します。配列になります。
o 区切り文字 -- 区切り文字や文字列です。
+ 正規表現なのですが、文字列の形で指定します。左右の「/」は付けず「"」で括ります。
+ 省略すると、変数 FSの値を使います。
+ 半角空白を1文字だけ指定すると、"[ \t\n]+"の指定と同じになります。
+ 区切り文字に「\」自身を指定する方法は、3種類あります。("\\"、"\\\\"、"[\\\\]")
+ "[\\]" はエラーになりますので、注意します。
o 戻り値 -- 分割結果の数
o 但し、全角文字を使うと、結果不正になる事のある処理系もありました。
+ Mawk for Windows 1.3.3
+ original = the one true awk(updated May 1, 2007)
**** 使用例
--------
function f_out(v_array, n, i) { # iは作業用変数です
for (i = 1; i <= n; ++i) {
print "out[" i "] = " v_array[i];
}
}
BEGIN {
print "# 'ミクさん', '', 'ミクさん'";
out_num = split("ミクさんaaミクさん", out_array, "[a]");
f_out(out_array, out_num);
print "# FSが'[a]'の時も同じ。 'ミクさん', '', 'ミクさん'";
FS="[a]";
out_num = split("ミクさんaaミクさん", out_array);
f_out(out_array, out_num);
}
--------
o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。
**** 機能
o 指定した条件で、文字列を分割します。
o 分割条件の指定が無い時は、変数 FSの値を使います。
o 区切り文字に半角空白を1文字だけ指定すると、"[ \t\n]+"の指定と同じになります。
+ 変数FSの値を使う時も同じです。
o 文字列の代わりに数値を指定すると、数値を文字列に変換してから使用します。
+ 長い整数を指定すると、最後の方の桁が0になったり、浮動小数点形式になります。
+ 実数を指定すると、6桁までに丸めたり、浮動小数点形式になります。
+ この動作は変える事も出来ます。詳しくは、「数値から文字列にする時に、実数を7桁以上表示させる方法」
** 処理系に依存する動作
o 次の処理系では、区切り文字を1文字だけ指定した時に、区切り文字に\nを追加して検索します。
+ 変数FSの値を使う時も同じです。
+ original = the one true awk(updated May 1, 2007)
o 以下の処理系では、全角文字を使うと結果不正になる事がありました。
+ Mawk for Windows 1.3.3
+ original = the one true awk(updated May 1, 2007)
例えば、split("ミク表さん", a, "\\"); の場合
+ Mawk for Windows 1.3.3 は、「表」の2バイト目で分割しました。
+ original = the one true awk(updated May 1, 2007)は、変数に入れた時点で「表」が文字化けしました。
**** 確認した処理系
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
▼制作メモ
> sprintf = 文字列を組み立てる
gsub = 文字列を置き換える
sub = 文字列を、最初の1つだけ置き換える
+
FS = 読み込んだ行を列に分割する時の区切り文字
IGNORECASE = 文字列比較の時に、大文字小文字を区別させない(Gawk専用)
文字列から文字を1つずつ取り出す
substr = 文字列の一部を取り出す
文字列を組み立てる
(2011年8月22日追加。「\」自身を指定する方法)
(2010年8月19日追加。確認した処理系を3つ追加)
(2010年6月10日追加。数値を指定した時の動作)