2010年6月29日火曜日

FS = 読み込んだ行を列に分割する時の区切り文字 - AWK

AWKの文字列操作関数と関連機能
AWKの入出力関数とコマンド実行機能
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
読み込んだ行を列に分割する時の、区切り文字です。

o ファイルからの入力の他、split(文字列の分割)でも使います。


**** 書式
--------
FS
もしくは
FS = "読み込み用の列区切り文字"
--------

o FSは変数です。初期値は半角空白1文字(" ")。
o 読み込み用の列区切り文字 -- 正規表現です。前後の「/」は付けず、文字列の形で指定します。例 = "[ \t]"


**** 使用例
--------
BEGIN {
  FS = "[a]";
}
{
  # 例えば、入力行が「ミaク」の時
  print $1 $2 "さん"; # 「ミクさん」
}
--------

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


**** 機能
o 読み込んだ行を列に分割する時の、区切り文字です。
o 初期値は" "、半角空白1文字です。
o 次の時に使われます。
   + 関数を使わずに 1行読み込んだ時(= $1などの値を入れる時に使います)
   + getlineで、読み込んだデータを入れる変数を指定しなかった時(= $1などの値を入れる時に使います)
   + split(文字列の分割)で、区切り文字を指定しなかった時、かつ、この変数に値を代入した時
o Gawkの場合、ファイルから読み込む時に限り、変数FIELDWIDTHSと競合します。Gawkが行を読み込む時、最後に設定した方の値を使います。
o 文字列の形ですが、中身は「/」無しの正規表現で指定します。
o 半角空白以外の1文字だけ指定した時、通常は、[]で括った時と同じ意味になります。
   + FS = "a"; の指定は、FS = "[a]"; と同じです。
   + FS = "\t"; の指定は、FS = "[\t]"; と同じです。\tはタブ文字1文字の意味です。
   + 例外は、original = the one true awkでsplitを使用する時です。
o 半角空白を1文字だけ指定すると、"[ \t\n]+"の指定と同じになります。
   + 空白類が並んでいると、読み飛ばします。
o 空文字("")を指定すると、1文字ずつ取り出す事が出来ます。

** 処理系に依存する動作
o original = the one true awk(updated May 1, 2007)で、splitを使用する時、FSの値に \nの条件が加わります。
   + FS = "a"; の指定は、FS = "[a\n]"; と同じになります。
   + FS = "\t"; の指定は、FS = "[\t\n]"; と同じになります。
   + この動作は、ファイル入力する時とは異なりますので、ご注意下さい。


**** メモ
o original = the one true awk(updated May 1, 2007)の場合、コマンドラインの -F オプションとは動きが異なります。「t」をタブ文字に変換するような事はしません。


**** 確認した処理系
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プログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > OFMT = printを使って数値1つだけを書き出す時の書式
    CONVFMT = 数値を文字列に自動変換する時の書式
    > RS = 1行読み込む時の改行文字
    FILENAME = 現在読み込み中ファイルの名前
    +
    getline = ファイル(やパイプ)から1行読み込む
    split = 文字列を分割する
    IGNORECASE = 文字列比較の時に、大文字小文字を区別させない(Gawk専用)
    FIELDWIDTHS = 固定長ファイルを読み込む為の設定(Gawk専用)
    OFS = printを使って出力する時の列区切り文字
(2010年9月6日追加。空文字を指定した時の動作)

AWKの入出力関数とコマンド実行機能 - AWK

AWKの関数、変数、制御文
o 「入力 = 読み込み」「出力 = 書き出し」です。

**** 入出力の手引き
入出力とコマンド実行の注意点まとめ
ファイルからデータを読み込む
タブ区切りでファイルを読み込む
▼パターンの書き方は、制御文関連へ
AWKでバイナリ出力する(mawk, Gawk専用)
AWKでバイナリ入力する(Gawk専用)
改行コード。Windows / UNIX / Mac の違いについて
GawkでUTF-8のファイルを読み込む時の注意点
Gawkで、UTF-8のファイルからBOMを除去する
   + Gawkでインターネットアクセスする方法はこちら


**** 組み込み関数
o 入出力する
getline = ファイル(やパイプ)から1行読み込む
print = ファイルなどに書き出す
printf = 文字列を組み立ててファイルなどに書き出す
close = 開いたファイル(やパイプ)を閉じる
fflush = 出力バッファーを空にする

o コマンドを実行する
system = OSのコマンドを実行して、終了コードを返す
   + この他に、getline関数とパイプを併用する方法があります。


**** 関係する変数
o 入出力結果
$0 = 最後に読み込んだデータ、1行分
$1 = 最後に読み込んだデータの1列目
NF = 最後に読み込んだ行の列数
RT = 最後に読み込んだ行の改行文字(Gawk専用)
FNR = 現在読み込み中のファイルから読み込んだ行数
NR = これまでに読み込んだ行数
ERRNO = 入出力系の最新エラーメッセージ (Gawk専用)

o 入出力する為に使う値
FS = 読み込んだ行を列に分割する時の区切り文字。$1, $2に関係します。
FPAT = 読み込んだ行を列に分割する時の列取り出し規則(Gawk専用。バージョン4以降)
RS = 1行読み込む時の改行文字
FILENAME = 現在読み込み中ファイルの名前
ARGV = AWK起動時に指定した入力ファイル名とコマンド名
OFS = printを使って書き出す時の列区切り文字
ORS = printを使って書き出す時の改行文字
OFMT = printを使って数値1つだけを書き出す時の書式
CONVFMT = 数値を文字列に自動変換する時の書式
IGNORECASE = 文字列比較の時に、大文字小文字を区別させない(Gawk専用)
FIELDWIDTHS = 固定長ファイルを読み込む為の設定(Gawk専用)
BINMODE = バイナリモードで読み書きする(mawk,Gawk専用)


**** 関係する固定値
/inet = AWKからインターネットにアクセスする(Gawk専用)
/dev/stdout = 標準出力を示すファイル名
/dev/stderr = 標準エラー出力を示すファイル名
/dev/null = 常に空のファイル名(Gawk専用)
AWKプログラムで使用可能な特殊ファイル名。標準入力、標準出力、標準エラー出力など


**** 関係する演算子
o ファイル入出力
<   = ファイルからの入力
>   = ファイルに出力。上書きモード
>>   = ファイルに出力。後ろに追加
o コマンドとのパイプ
|   = パイプ。左の実行結果を右に渡す
|&   = 双方向通信(Gawk専用)
     + Windows 版 Gawk は、インターネット接続のみ
     + Unix 版 Gawk は、インターネット接続と、同一コマンドへの双方向通信


**** メモ
o mawk系と他のプログラムをパイプで繋ぐ時、「-W interactive」オプションを付けて実行した方が良い場合があります。
   + 何も指定しないと、mawkは、出来るだけ纏めて処理しようとするからです。

入出力とコマンド実行機能のサポート状況
名前Gawk on
Windows
3.1.7
Gawk for
Windows
3.1.6
mawk32
1.3.3
Mawk for
Windows
1.3.3
awk
(May 1,
2007)
説明
入出力  
getline
(パイプ
不可)
ファイル(やパイプ)から1行読み込む
print
(パイプ
不可)
ファイルなどに書き出す
printf
(パイプ
不可)
文字列を組み立ててファイルなどに書き出す
close
(パイプ
不可)
開いたファイル(やパイプ)を閉じる
fflush
(パイプ
不可)
出力バッファーを空にする
コマンド実行  
system×OSのコマンドを実行して、終了コードを返す
変数。入力結果  
$0最後に読み込んだデータ、1行分
$1
(注記
あり)

(注記
あり)

(注記
あり)
最後に読み込んだデータの1列目
NF最後に読み込んだ行の列数
RT×××最後に読み込んだ行の改行文字
FNR現在読み込み中のファイルから読み込んだ行数
NRこれまでに読み込んだ行数
ERRNO×××入出力系の最新エラーメッセージ
変数。入出力する為に使う値  
FS読み込んだ行を列に分割する時の区切り文字。$1, $2に関係します
RS
(1文字
のみ)
1行読み込む時の改行文字
FILENAME現在読み込み中ファイルの名前
OFSprintを使って書き出す時の列区切り文字
ORSprintを使って書き出す時の改行文字
OFMTprintを使って数値1つだけを書き出す時の書式
CONVFMT数値を文字列に自動変換する時の書式
FIELDWIDTHS
(文字数)

(バイト数)
×××固定長ファイルを読み込む為の設定
BINMODE
(書き出しのみ)
×バイナリモードで読み書きする


特別なファイル名の一覧
名前Gawk on Windows 3.1.7Gawk for Windows 3.1.6mawk32 1.3.3Mawk for Windows 1.3.3awk (May 1, 2007)説明
入力  
/dev/stdin××標準入力 = コマンドプロンプト画面からの読み込み
/dev/fd/0×××標準入力。/dev/stdin と同じです
出力  
/dev/stdout標準出力 = コマンドプロンプト画面への書き出し
/dev/stderr標準エラー出力 = コマンドプロンプト画面への書き出しその2
/dev/null×××どこにも出力しない
/dev/fd/1×××標準出力。/dev/stdout と同じです
/dev/fd/2×××標準エラー出力。/dev/stderr と同じです
/dev/tty×××××現在表示中のコマンドプロンプト画面に出力。バックグラウンドで使用不可
入力。プロセス情報など取得(非推奨) 
/dev/pid×××自分のプロセスID。変数「PROCINFO」の使用を推奨
/dev/ppid×××××親プロセスのID。変数「PROCINFO」の使用を推奨
/dev/pgrpid×××××自分のプロセスのグループID。変数「PROCINFO」の使用を推奨
/dev/user×××××1行にユーザーIDなど4情報。$1 = uid / $2 = euid / $3 = gid / $4 = egid。変数「PROCINFO」の使用を推奨


==
関連ページ:
    ▼AWKの関数、変数、制御文▼ABC順
    ▼AWKプログラムを書く
    ▼AWK
    ▼制作メモ
    > ▼AWKのインターネット接続機能(Gawk専用)
    ▼AWKの国際化対応機能 i18n(Gawk専用)
    ▼AWKのパターンと制御文
    +
    ▼AWKの数値計算関数と関連機能
    ▼AWKの文字列操作関数と関連機能
    ▼AWKの時刻取得関数と関連機能

FNR = 現在読み込み中のファイルから読み込んだ行数 - AWK

AWKの入出力関数とコマンド実行機能
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
現在読み込み中のファイルから読み込んだ行数です。
o AWKプログラム内でファイルを指定して読み込んだ分は、行数に数えません。

**** 書式
--------
FNR
もしくは
FNR = 行番号
--------

o FNRは変数です。
o 行番号 -- 好きな数字を入れる事が出来ます。
   + 小数点以下のある値を入れると、Gawkは整数に丸めます。


**** 使用例
--------
{
  print "只今、ファイル「" FILENAME "」の " FNR "行目です。ミクさん。";
}
--------

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


**** 機能
o 現在読み込み中のファイルから読み込んだ行数です。
   + パターンに一致しない行も、読み込んでいたら数えます。
   + 途中でexitすると、exit以降読み飛ばした行は数えません。
o AWK実行時に入力ファイルを複数指定した時、現在読み込み中のファイルのみ数えます。
o getlineを使って読み込む場合
   + ファイルを指定せずに読み込んだ分は、行数に数えます。
   + ファイルを指定して読み込んだ分は、行数に数えません。
   + ファイル名に FILENAME (= 読み込み中のファイル名)を指定しても、行数に数えません。

** 処理系に依存する動作
o NR = 1.5 のように、小数点以下を持つ値を設定した場合
   + Gawkは整数に丸めます。この場合は、1になります。
   + mawkとoriginal-awkは、1.5のまま設定します。


**** メモ
o 複数ファイルを読み込んでいて、入力ファイルから読み込んだ行数の合計を知りたい時は、NRを使います。


**** 確認した処理系
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
    ▼制作メモ
    > NR = これまでに読み込んだ行数
    ERRNO = 入出力系の最新エラーメッセージ(Gawk専用)
    FS = 読み込んだ行を列に分割する時の区切り文字
    +
    NF = 最後に読み込んだ行の列数
    FILENAME = 現在読み込み中ファイルの名前
    $0 = 最後に読み込んだデータ、1行分
(2010年8月16日追加。手動更新した場合)

NR = これまでに読み込んだ行数 - AWK

AWKの入出力関数とコマンド実行機能
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
これまでに読み込んだ行数です。
o 入力ファイルを複数指定した時、読み込んだ行数の合計になります。
o AWKプログラム内でファイルを指定して読み込んだ分は、行数に数えません。
o 現在読み込み中のファイルから読み込んだ行数を知りたい時は、変数FNRを使います。

**** 書式
--------
NR
もしくは
NR = 行番号
--------

o NRは変数です。
o 行番号 -- 好きな数字を入れる事が出来ます。
   + 小数点以下のある値を入れると、Gawkは整数に丸めます。


**** 使用例
--------
END {
  print "全部で " NR "行読み込みました。ミクさん。";
}
--------

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


**** 機能
o これまでに読み込んだ行数の合計です。
   + パターンに一致しない行も、読み込んでいたら数えます。
   + 途中でexitすると、exit以降読み飛ばした行は数えません。
o AWK実行時に入力ファイルを複数指定した時、今までに読み込んだ行数を合計します。
o getlineを使って読み込む場合
   + ファイルを指定せずに読み込んだ分は、行数に数えます。
   + ファイルを指定して読み込んだ分は、行数に数えません。
   + ファイル名に FILENAME (= 読み込み中のファイル名)を指定しても、行数に数えません。

** 処理系に依存する動作
o NR = 1.5 のように、小数点以下を持つ値を設定した場合
   + Gawkは整数に丸めます。この場合は、1になります。
   + mawkとoriginal-awkは、1.5のまま設定します。


**** 確認した処理系
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
    ▼制作メモ
    > ERRNO = 入出力系の最新エラーメッセージ
    FS = 読み込んだ行を列に分割する時の区切り文字
    RS = 1行読み込む時の改行文字
    +
    FNR = 現在の入力ファイルから読み込んだ行数
    NF = 最後に読み込んだ行の列数
    $0 = 最後に読み込んだデータ、1行分
(2010年8月16日追加。手動更新した場合)