2010年6月30日水曜日

NF = 最後に読み込んだ行の列数 - AWK

AWKの入出力関数とコマンド実行機能 ▲
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
最後に読み込んだ行の列数です。
o AWKは1行読み込むと、自動的に列に分割して、$1、$2、$3、、、に値を入れます。
o 行全体のデータは、$0に入っています。

**** 書式
--------
NF
--------

o NFは変数です。


**** 使用例
--------
{
  for (i = 1; i <= NF; ++i) {
    print $i "、おはようございます。";
  }
}
--------

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

o 入力データ
--------
ミクさん リンちゃん レン君 ルカ様
--------



**** 機能
o 最後に読み込んだ行の列数です。
   + 列の区切り文字は、通常「半角空白、タブ(、改行文字)」ですが、FSで変更出来ます。
o この変数に値を代入すると、$0の値を自動変更(= 再構築)する処理系があります。
   + mawk, Gawkで列数を調整したい時に便利です。
o また、この変数に負の値にすると、強制終了する処理系があります。

o 次の操作は、NFの値を変更します。
   + 関数を呼び出さずに、1行読み込んだ時
   + getlineを、引数無しで呼び出した時
   + $0、$1など変数「$ + 数字」に値を代入した時
      + $0を更新した時は、自動的に$1などとNFが再設定されます。
      + $1など、数字が1以上の時は、その数字が NFよりも大きなときに限り、NFにその数字を設定します。
      + $1 = $1のように同じ値を代入しても、同じ動きをします。
   + NFの値を直接上書きした時


** 処理系に依存する動作
o この変数に値を代入した時、$0の値を自動変更(= 再構築)する処理系
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6
   + mawk MBCS (32bit版) 1.3.3
   + Mawk for Windows 1.3.3
   + この時、各列の間にある区切り文字を、変数OFSの値で置き換えます。
   + NF = NFのように同じ値を代入しても、同じ動きをします。
   + これらの処理系では、NFを負の値にすると、強制終了します。
o この変数に値を代入した時、$0の値を変更しない処理系
   + original = the one true awk(updated May 1, 2007)
   + この処理系では、NFの値が負になっても、$0の値を参照する事が出来ます。


**** メモ
o 最後の列のデータを取り出す時は、$NF と書く方法が簡単です。


**** 確認した処理系
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
    ▼制作メモ
    > RT = 最後に読み込んだ行の改行文字
    FNR = 現在読み込み中のファイルから読み込んだ行数
    NR = これまでに読み込んだ行数
    +
    ファイルからデータを読み込む
    $0 = 最後に読み込んだデータ、1行分
    $1 = 最後に読み込んだデータの1列目
(2010年9月9日追加。$0や$1との関係と負の値)

AWK本家のホームページの場所 - AWK

AWKを入手する ▲
最新版に関する情報が最も早いのは、本家のページです。全て英語です。

** オリジナルawk
▽The AWK Programming Language
   + AWKを開発したチームが公開している、AWKのホームページです。
   + Windows版の実行ファイルも配布中です。
   + 仕様や使い方は、書籍として出版されています。

** nawk
▽newest Awk (nawk)
   + AWK言語開発者の一人が公開している、the one true awkの最新版です。
   + オリジナルawkに対して、不具合修正が入っているみたいです。

** mawk
Debian 安定板(squeeze)の mawk パッケージ
   + 最も高速に動くawk処理系です。
   + おそらく、こちらが最新版。
▽mawk - pattern scanning and text processing language
   + mawkの改良を行っている方のページです。(mawk開発者とは別の方です)

** Gawk
▽Gawk - GNU Project - Free Software Foundation (FSF)
   + 高機能です。おそらく、最も人気があるawk処理系です。
   + ▽説明書はこちらです。


==
関連ページ:
    ▼AWKを入手する
    ▼AWK
    ▼制作メモ
    > ▼AWKプログラムを動かす
    AWKの種類と特徴
    Windows 版gawk, mawkを入手する
(2011年7月21日追加。nawk)

system = OSのコマンドを実行して、終了コードを返す - AWK

AWKの入出力関数とコマンド実行機能 ▲
○Gawk on Windows ○Gawk ○mawk32 ×Mawk ○awk
OSのコマンドを実行して、終了コードを返します。

**** 書式
--------
system( [実行するコマンド] )
--------

o 実行するコマンド -- 文字列の形で指定します。


**** 使用例(Windowsの場合)
o UNIXの方は、"date /t"の部分を、"ls"などに置き換えてみて下さい。
--------
BEGIN {
  v = system("date /t");
  print "コマンドのリターンコード = (" v ")";
}
--------

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


**** 機能
o OSのコマンドを実行して、終了コードを返します。
o 但し、systemをサポートしていない処理系があります。
   + Mawk for Windows 1.3.3では、実行せずに、終了コード(127)を返します。(= Windows XP SP3で確認)


**** メモ
o コマンドを実行する方法は、他にもあります。getlineでパイプを実行する方法です。


**** 確認した処理系
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
    ▼制作メモ
    > $0 = 最後に読み込んだデータ、1行分
    $1 = 最後に読み込んだデータの1列目
    NF = 最後に読み込んだ行の列数
    +
    exit = 終了する

FILENAME = 現在読み込み中ファイルの名前 - AWK

AWKの入出力関数とコマンド実行機能 ▲
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
現在読み込み中ファイルの名前です。
o これから読み込むファイル名を変更したい時は、ARGVやARGCを変更します。

**** 書式
--------
FILENAME
--------

o FILENAMEは変数です。
o FILENAMEの値を変更する事も出来ますが、AWKの動作は変わりません。


**** 使用例
--------
{
  print "只今、ファイル [" FILENAME "]の、" FNR "行目を読み込みました。";
}
--------

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


**** 機能
o 現在読み込み中ファイルの名前です。
o 標準入力から読み込んだ時、名前は「-」になります。例えば、
   + 入力ファイル名を指定せず、入力内容を手入力する場合
   + パイプを使って、他のコマンドの出力結果をawkプログラムに渡す場合
o getlineを使って別のファイル(やパイプ)を開いても、FILENAMEの値は変わりません。
o FILENAMEの値を変更しても、読み込み中ファイルは切り替わりません。


**** 確認した処理系
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
    ▼制作メモ
    > ARGV = AWK起動時に指定した入力ファイル名とコマンド名
    OFS = printを使って書き出す時の列区切り文字
    ORS = printを使って書き出す時の改行文字
    +
    FNR = 現在の入力ファイルから読み込んだ行数
    ARGC = ARGVに入っている要素の個数
    ARGIND = ARGVにおける現在入力中ファイルの位置(Gawk専用)
(2010年8月15日追加。手動更新した場合)

RS = 1行読み込む時の改行文字 - AWK

AWKの入出力関数とコマンド実行機能 ▲
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○(1文字のみ)awk
ファイル(やパイプ)から1行読み込む時の、改行文字です。

**** 書式
--------
RS
もしくは
RS = "改行文字"
--------

o RSは変数です。初期値は改行文字("\n")。
o 改行文字 -- 正規表現です。前後の「/」は付けず、文字列の形で指定します。例 = "[\r\n]+" (空行を読み飛ばす書き方)


**** 使用例
--------
BEGIN {
  RS = "+";
}
{
  # 例えば、入力ファイルが「ミクさん+リンちゃん+レン君+ルカ様」の時
  print $0 ; # 最初の行は「ミクさん」
}
--------

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


**** 機能
o ファイル(やパイプ)から1行読み込む時の、改行文字です。
o 初期値は改行文字("\n")です。
o 1文字だけ指定した時、全ての処理系で同じように動きます。
   + その動きは、正規表現に例えると、[]で括った時と同じです。
   + RS = "a"; の指定は、RS = "[a]"; と同じです。
   + RS = "\t"; の指定は、RS = "[\t]"; と同じです。\tはタブ文字1文字の意味です。
   + RS = " "; の指定は、RS = "[ ]"; と同じです。FSの時とは違います。
   + RS = ""; (= 空文字)の指定は、RS = "[\n][\n]"; と同じです。改行文字が2つ並ぶまでを1行とします。
      + 改行2つは、インターネットの通信で良く使われている記号です。


** 処理系に依存する動作
o mawk系、Gawk系の場合
   + 文字列の形ですが、中身は「/」無しの正規表現で指定します。
   + 2文字以上指定する事が出来ます。
o original = the one true awk(updated May 1, 2007)の場合
   + 常に、先頭の1字のみで判断します。
   + RS = "[\t];" と指定すると、先頭の「[」を行の区切り文字だと判断します。


**** メモ
o RS の値変更機能は、XMLや JavaScriptを扱う時に重宝しています。

o バックアップXMLや強力なJavaScriptライブラリは、処理の単純化やファイルサイズ縮小などの目的で、改行コードを必要最小限に抑えたり除去する事が良くあります。
o それらのデータを解析したり加工したい時、そのままの状態で開いても読み難いです。
o そこで、RSで行区切り文字(例えば、RS = ">")を設定して改行コードを加えると、読み易い形式に変換する事が出来ます。データ加工でタグを切り出す時にも、便利です。
o 具体例は「Bloggerのエクスポートファイルからテンプレートを取り出す方法」


**** 確認した処理系
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) -- 最初の1文字のみ有効


==
関連ページ:
    ▼AWKの入出力関数とコマンド実行機能(▼ABC順)
    ▼AWKプログラムを書く(▼ABC順)
    ▼AWK
    ▼制作メモ
    > FILENAME = 現在読み込み中ファイルの名前
    ARGV = AWK起動時に指定した入力ファイル名とコマンド名
    OFS = printを使って書き出す時の列区切り文字
    +
    getline = ファイル(やパイプ)から1行読み込む
    FS = 入力行を列に分割する時の区切り文字
    RT = 最後に読み込んだ行の改行文字(Gawk専用)
    FIELDWIDTHS = 固定長ファイルを読み込む為の設定(Gawk専用)
    ORS = printを使って書き出す時の改行文字
(2010年9月29日追加。メモ欄にてRSの便利な使い方)
(2010年9月7日変更。\n指定時の動作が間違っていたので削除。空文字指定時の動作を追加。)

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○○○○○現在読み込み中ファイルの名前
OFS○○○○○printを使って書き出す時の列区切り文字
ORS○○○○○printを使って書き出す時の改行文字
OFMT○○○○○printを使って数値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日追加。手動更新した場合)

2010年6月28日月曜日

HTMLの編集やHTMLモードで入力する時に、変換が必要になる記号 - Blogger

Bloggerブログの本文を書く。ラベルと貼り付けとHTMLモード ▲
Bloggerで文章を書く時、通常は Bloggerが自動変換してくれますので、記号を気にする必要はありません。
でも、HTMLの編集や、HTMLモードで書く時は、自分で変換しないと正しく文字表示してくれない記号があります。


**** HTMLモードの時に、変換が必要な記号
o 「 」 = 「&nbsp;」
   = 半角空白です。2つ以上並べて表示させたい時は、変換が必要です。
o 「<」 = 「&lt;」
   = 不等号の小なりです。HTMLタグの開始文字として使用されています。
o 「>」 = 「&gt;」
   = 不等号の大なりです。HTMLタグの終了文字として使用されています。
o 「&」 = 「&amp;」
   = アンパサンド
   HTMLでは、主に、特殊文字を表現する頭文字として登場します。その特殊文字の書き方を表現したい時には、変換が必要になります。
o タブ文字
   コピーして貼り付ける方向け。見栄えを合わせたい時は、&nbsp;を並べたものに置き換えます。
   後でタブ幅を調整したい時は、タブを「<span class="xTab"> </span>」などの書き方に変更して、cssで長さを指定する方法が使えそうです。


**** 場合によっては、変換が必要になるかもしれない記号
o 改行 = 「<br />」など
   HTMLの編集中に、文章の途中で改行させたい時は、変換が必要です。
   記事を書く時は、普通は自動改行の設定になっていますので、変換は不要です。
o 「"」(= 二重引用符) = 「&quot;」
   HTMLでは、文字を指定する時に登場します。引用符の中に引用符を入れたい時に、良く使われています。

o 他にも表示されない文字がある時は、Web検索。
   + 検索キーワード「HTML 特殊文字」辺りで検索すると、書き方が載っています。


==
関連ページ:
    ▼Bloggerブログの本文を書く。ラベルと貼り付けとHTMLモード
    ▼Blogger
    ▼制作メモ
    > HTMLモード。特定ページのサイドバーが下にずれる時の確認点
(2010年6月28日変更。小見出しの見直し。変換が必要になるのはHTMLモードの時)

the one true awk(オリジナルAWK)の実行オプション一覧 - AWK

AWKプログラムを動かす ▲
the one true awk(updated May 1, 2007)のWindows版で確認しました。

**** オリジナルawkの書式
--------
awk [オプション群] ["AWKプログラム"] [入力ファイル名群]
--------

o オプション群 -- 下の通りです。複数のオプションを並べる事も出来ます。
o AWKプログラム -- この他に、-f オプションを使ってAWKプログラムを指定する方法もあります。
   + Windowsの場合は、「"」(= 二重引用符)で括ります。
o 入力ファイル名群 -- AWKプログラムが読み込むファイル名です。複数並べて書くと一度に全部処理します。(ファイル名の間は、半角空白文字で区切ります)

o Windows版の実行ファイルは、awk95.exeです。


**** オプション一覧
オプション説明
-dデバッグモード。入力情報の解析結果なども一緒に出力します。
-f ファイル名AWKプログラムをファイルから読み込みます。
-F 区切り文字1行を$1、$2などに分割する時の区切り文字を指定します。
-Fと区切り文字の間は、詰めても大丈夫です。
-F t は、\t = タブ文字を指定した時と同じです。
-safeセーフモード。危険を伴う操作を見つけたら実行を中止して、警告を出します。例えば、
system関数の使用
コマンド実行結果のgetline
print文をリダイレクト = 出力ファイルを指定
-v 変数名=値変数の値を与えます。例 -v var1=1
2つ書く時 -v var1=aaa -v var2=bbb
-versionAWKのバージョンを表示します。
--最後のオプションとして付ける事が出来ます。何もせず、次の指定を読みます。
途中に入れると、オプションの解析を打ち切って終了しますので、ご注意下さい。
--version-versionと同じです。AWKのバージョンを表示します。


**** メモ
o Windows向けにAWKプログラムを書く時、コマンド実行の括り文字は、「`」(= 逆引用符 = バッククォート)ではなくて、「"」(= 二重引用符)です。
   + `dir` では動きませんでした。"dir"と書きます。

==
関連ページ:
    ▼AWKプログラムを動かす
    ▼AWK
    ▼制作メモ
    > AWKを実行する時に、プログラムファイルを複数指定する
    AWKプログラム実行時に変数を設定する
    AWKで入力ファイルの指定を不要にする
    Windows版AWKの配布元一覧(awk, mawk, Gawk)
(2011年5月23日訂正。記号の呼び方。「`」は逆引用符)

2010年6月27日日曜日

全ての記事の最初や最後に、決まり文句や固定リンクを追加する方法 - Blogger

Bloggerブログの見栄えを変更する ▲
全ての記事の最初や最後に決まり文句を入れたい時は、テンプレートを変更する方法があります。後で変更する事も、簡単に出来ます。

但し、テンプレートデザイナーを使うと、最初からやり直しになるかもしれません。この方法を使う時は、デザインが完全になってから行う事をおすすめします。


**** 手順
o テンプレートを編集する画面を開きます。
   + 手順は「Blogger をCSSカスタマイズする方法」の2番(徹底的にカスタマイズする方法)です。
o 念の為、テンプレートをバックアップします。
o 入力欄の右上にある、「ウィジェットのテンプレートを展開」にチェックを入れます。
o 「<data:post.body/>」が書かれている行を見つけて、その前後辺りに文字等を追加します。
   + 具体的な方法は、この下にある「変更の例」をご覧下さい。
o 変更が終わりましたら
   + 「プレビュー」ボタンを押して、トップページを確認。
   + 「テンプレートを保存」ボタンを押して、他のページの内容も確認します。


**** 変更の例
変更前(= ここでは、左の空白を詰めて表示しています。)
----------------
<div class='post-body entry-content'>
  <data:post.body/>
  <div style='clear: both;'/> <!-- clear for photos floats -->
</div>
----------------

o 変更後の例1。文の最初に決まり文句を入れて、改行します。
----------------
<div class='post-body entry-content'>
タイが曲がっていましてよ。<br />
  <data:post.body/>
  <div style='clear: both;'/> <!-- clear for photos floats -->
</div>
----------------

o 変更後の例2。記事が単独表示された時だけ、下に、「この頁の上に戻る」リンクを入れます。
----------------
<div class='post-body entry-content'>
  <data:post.body/>
  <div style='clear: both;'/> <!-- clear for photos floats -->
  <b:if cond='data:blog.pageType == &quot;item&quot;'>
    <div class='xDataEnd'><a href='#' rel='nofollow'>↑この頁の上に戻る</a></div>
  </b:if>
</div>
----------------
o 後ろに追加する場合、clear: both; の行の後ろに入れる事をおすすめします。
   + clear: both;は、CSSの、位置に関する特殊設定を無効にする命令です。
o b:ifタグは、Bloggerの専用タグです。この例のように、特定ページの時だけ表示させる事が出来ます。
o rel='nofollow'はお好みで。検索エンジンに「このリンクは意味が無いよ」と伝えます。
o classタグを指定しておくと、CSSを使って、見栄えを大幅に変える事が出来ます。
----------------
.xDataEnd { text-align: right; } /* 右寄せしたくなった時 */
----------------


==
関連ページ:
    ▼Bloggerブログの見栄えを変更する
    ▼Blogger
    ▼制作メモ
    > BloggerのHTMLカスタマイズに関する公式情報の在り処
    Blogger in Draft = Bloggerの最新機能を試用する
    HTMLの編集やHTMLモードで入力する時に、変換が必要になる記号

2010年6月25日金曜日

strftimeの書式一覧。 Gawk on Windows編 - AWK

AWKのstrftime関数 ▲
互換性の欄は、他のWindows用AWK処理系(Gawk for Windows 3.1.6 / mawk MBCS (32bit版) 1.3.3)で確認しました。「△ = 表現が異なる処理系がある」「× = サポートしていない処理系がある」です。

サポートしている strftime 書式(機能別)
サポートしている strftime 書式(ABC順)
書式調査資料

Gawk on Windows 3.1.7がサポートしている strftime 書式(機能別)
書式(機能別)実行結果の例互換性説明
-- %文字 --
%%[%]○パーセント記号
-- 年、月、日 --
%Y[2001]○西暦年
%m[02]○月(01-12)
%d[03]○日(01-31)
%y[01]○西暦年の下2桁(00-99)
%B[2月]△月名
%b[2]△月名の省略形
%j[034]○年の初めから数えた日数(001-366)
-- 時、分、秒 --
%H[04]○時。24時間表記(00-23)
%M[05]○分(00-59)
%S[06]○秒(00-59)。閏秒を表示するシステムの場合は61秒までの可能性
%I[04]○時。12時間表記(01-12)
%p[午前]△午前/午後の大文字
-- 曜日、週番号 --
%w[6]○曜日番号。日曜日が0(0-6)
%A[土曜日]△曜日
%a[土]△曜日の省略形
%U[04]○週番号。その年の最初の日曜日から1週目。最初の日曜日の前日までは00。(00-53)
%W[05]○週番号。その年の最初の月曜日から1週目。最初の月曜日の前日までは00。(00-53)
-- タイムゾーン --
%Z[東京 (標準時)]×タイムゾーン。名前または省略形。不明な場合は空です。
-- 組み合わせ --
%x[2001/02/03]△一般的な年月日表記
%X[4:05:06]△一般的な時刻表記。年月日は含みません。デジタル時計では、この表記(分秒だけ前ゼロ)を良く見かけます。
%c[2001/02/03 4:05:06]△一般的な年月日と時刻

Gawk on Windows 3.1.7がサポートしている strftime 書式(ABC順)
書式(ABC順)実行結果の例互換性説明
%A[土曜日]△曜日
%a[土]△曜日の省略形
%B[2月]△月名
%b[2]△月名の省略形
%c[2001/02/03 4:05:06]△一般的な年月日と時刻
%d[03]○日(01-31)
%H[04]○時。24時間表記(00-23)
%I[04]○時。12時間表記(01-12)
%j[034]○年の初めから数えた日数(001-366)
%M[05]○分(00-59)
%m[02]○月(01-12)
%p[午前]△午前/午後の大文字
%S[06]○秒(00-59)。閏秒を表示するシステムの場合は61秒までの可能性
%U[04]○週番号。その年の最初の日曜日から1週目。最初の日曜日の前日までは00。(00-53)
%W[05]○週番号。その年の最初の月曜日から1週目。最初の月曜日の前日までは00。(00-53)
%w[6]○曜日番号。日曜日が0(0-6)
%X[4:05:06]△一般的な時刻表記。年月日は含みません。デジタル時計では、この表記(分秒だけ前ゼロ)を良く見かけます。
%x[2001/02/03]△一般的な年月日表記
%Y[2001]○西暦年
%y[01]○西暦年の下2桁(00-99)
%Z[東京 (標準時)]×タイムゾーン。名前または省略形。不明な場合は空です。
%%[%]○パーセント記号

# --------------------------------------------------------------
# 基礎資料。strftime書式調査テスト結果
#
テストに使った書式は、各awk処理系の説明書の他、C言語の同名関数で見かけた書式も混ぜました。
◎の意味は、「日本語対応として望ましい」です。
色が付いている所は、未サポート、もしくは正しいとされる表記が複数あって、互換性に乏しい所です。


調査したAWK処理系 = Gawk on Windows 3.1.7 (2009年11月24日版)
OS = Windows XP SP3 日本語版
調査に使った関数 = strftime
環境変数の追加設定無し = TZやLC_系環境変数の指定無し

# -------------------------------
# テスト1。2001年2月3日4時5分6秒 UTC+9
# -------------------------------
書式(ABC順)実行結果判定説明
%A[土曜日]◎曜日(例。Wednesday)
%a[土]◎曜日の省略形(例。Wed)
%B[2月]◎月名(例。August)
%b[2]△月名の省略形(例。Aug)
%C[]×世紀。西暦年から下位2桁を除去
%c[2001/02/03 4:05:06]◎一般的な年月日と時刻
%D[]×米国で一般的な年月日(%m/%d/%y)
%d[03]○日(01-31)
%e[]×月。1桁の時は左に半角空白( 1-31)
%F[]×年月日。ISO 8601形式。%Y-%m-%d
%G[]×年。ISO 8601週単位表記。年末年始で、%Yと異なります。
%g[]×年。ISO 8601週単位表記の下2桁(00-99)
%H[04]○時。24時間表記(00-23)
%h[]×%bと同じです。月名の省略形(例。Aug)
%I[04]○時。12時間表記(01-12)
%j[034]○年の初めから数えた日数(001-366)
%k[]×時。24時間表記で、1桁の時は左に半角空白( 0-23)
%l[]×時。12時間表記で、1桁の時は左に半角空白( 0-12)
%M[05]○分(00-59)
%m[02]○月(01-12)
%n[]×改行
%P[]×午前/午後の小文字
%p[午前]◎午前/午後の大文字
%R[]×24時間表記の時分(%H:%M)
%r[]×12時間表記の時分秒+午前午後(%I:%M:%S %p)
%S[06]○秒(00-59)。閏秒を表示するシステムの場合は61秒までの可能性
%s[]×基準時刻からの秒数。1970年1月1日0時(UTC)から
%T[]×24 時間表記の時分秒 (%H:%M:%S)
%t[]×タブ文字
%U[04]○週番号。その年の最初の日曜日から1週目。最初の日曜日の前日までは00。(00-53)
%u[]×曜日番号。月曜日が1(1-7)
%W[05]○週番号。その年の最初の月曜日から1週目。最初の月曜日の前日までは00。(00-53)
%w[6]○曜日番号。日曜日が0(0-6)
%X[4:05:06]◎一般的な時刻表記。年月日は含みません。デジタル時計では、この表記(分秒だけ前ゼロ)を良く見かけます。
%x[2001/02/03]◎一般的な年月日表記
%V[]×週番号。ISO 8601週単位表記。週の最初は月曜日。1月1日を含む週は、所属日の多い年に含めます。
%v[]×VMSフォーマットの日付。09-MAR-2039
%Y[2001]○西暦年
%y[01]○西暦年の下2桁(00-99)
%Z[東京 (標準時)]○タイムゾーン。名前または省略形。不明な場合は空です。
%z[東京 (標準時)]×タイムゾーン。+HHMM形式 = RFC 822/RFC 1036(例 +0900)。不明な場合は空です。
%%[%]○パーセント記号
%EC[C]×拡張表現。元号(無い時は%Cと同じです)
%Ec[c]×拡張表現。地域固有の日付時刻表現(無い時は%cと同じです)
%EX[X]×拡張表現。地域固有の時刻表現(無い時は%Xと同じです)
%Ex[x]×拡張表現。地域固有の日付表現(無い時は%xと同じです)
%EY[Y]×拡張表現。元号付きの年、完全表記。平成元年のような、こだわり表記が出来ます。(無い時は%Yと同じです)
%Ey[y]×拡張表現。元号で数えた時の、年の数字(無い時は%yと同じです)
%Od[d]×拡張表現。地域固有の日表現。最大桁数になるまで、左を0で埋めます。(無い時は%dと同じです)
%Oe[e]×拡張表現。地域固有の日表現。最大桁数になるまで、左を半角空白で埋めます。(無い時は%eと同じです)
%OH[H]×拡張表現。地域固有の時表現(24時間)(無い時は%Hと同じです)
%OI[I]×拡張表現。地域固有の時表現(12時間)(無い時は%Iと同じです)
%OM[M]×拡張表現。地域固有の分表現(無い時は%Mと同じです)
%Om[m]×拡張表現。地域固有の月表現(無い時は%mと同じです)
%OS[S]×拡張表現。地域固有の秒表現(無い時は%Sと同じです)
%OU[U]×拡張表現。地域固有の週番号表現。その年の最初の日曜日から1週目。その前日までは00相当(無い時は%Uと同じです)
%Ou[u]×拡張表現。地域固有の曜日番号表現。月曜日が1で、7まで(無い時は%uと同じです)
%OV[V]×拡張表現。地域固有の週番号表現。ISO 8601の規定通り。週の最初は月曜日。1月1日を含む週は、所属日の多い年に含めます。(無い時は%Vと同じです)
%OW[W]×拡張表現。地域固有の週番号表現。その年の最初の月曜日から1週目。その前日までは00相当(無い時は%Wと同じです)
%Ow[w]×拡張表現。地域固有の曜日番号表現。日曜日が0で、6まで(無い時は%wと同じです)
%Oy[y]×拡張表現。地域固有の西暦年下2桁表現(無い時は%yと同じです)

# -------------------------------
# テスト2。2010年1月1日23時59分59秒 UTC+9
# -------------------------------
書式(ABC順)実行結果判定説明
%A[金曜日]◎曜日(例。Wednesday)
%a[金]◎曜日の省略形(例。Wed)
%B[1月]◎月名(例。August)
%b[1]△月名の省略形(例。Aug)
%C[]×世紀。西暦年から下位2桁を除去
%c[2010/01/01 23:59:59]◎一般的な年月日と時刻
%D[]×米国で一般的な年月日(%m/%d/%y)
%d[01]○日(01-31)
%e[]×月。1桁の時は左に半角空白( 1-31)
%F[]×年月日。ISO 8601形式。%Y-%m-%d
%G[]×年。ISO 8601週単位表記。年末年始で、%Yと異なります。
%g[]×年。ISO 8601週単位表記の下2桁(00-99)
%H[23]○時。24時間表記(00-23)
%h[]×%bと同じです。月名の省略形(例。Aug)
%I[11]○時。12時間表記(01-12)
%j[001]○年の初めから数えた日数(001-366)
%k[]×時。24時間表記で、1桁の時は左に半角空白( 0-23)
%l[]×時。12時間表記で、1桁の時は左に半角空白( 0-12)
%M[59]○分(00-59)
%m[01]○月(01-12)
%n[]×改行
%P[]×午前/午後の小文字
%p[午後]◎午前/午後の大文字
%R[]×24時間表記の時分(%H:%M)
%r[]×12時間表記の時分秒+午前午後(%I:%M:%S %p)
%S[59]○秒(00-59)。閏秒を表示するシステムの場合は61秒までの可能性
%s[]×基準時刻からの秒数。1970年1月1日0時(UTC)から
%T[]×24 時間表記の時分秒 (%H:%M:%S)
%t[]×タブ文字
%U[00]○週番号。その年の最初の日曜日から1週目。最初の日曜日の前日までは00。(00-53)
%u[]×曜日番号。月曜日が1(1-7)
%W[00]○週番号。その年の最初の月曜日から1週目。最初の月曜日の前日までは00。(00-53)
%w[5]○曜日番号。日曜日が0(0-6)
%X[23:59:59]○一般的な時刻表記。年月日は含みません。
%x[2010/01/01]◎一般的な年月日表記
%V[]×週番号。ISO 8601週単位表記。週の最初は月曜日。1月1日を含む週は、所属日の多い年に含めます。
%v[]×VMSフォーマットの日付。09-MAR-2039
%Y[2010]○西暦年
%y[10]○西暦年の下2桁(00-99)
%Z[東京 (標準時)]○タイムゾーン。名前または省略形。不明な場合は空です。
%z[東京 (標準時)]×タイムゾーン。+HHMM形式 = RFC 822/RFC 1036(例 +0900)。不明な場合は空です。
%%[%]○パーセント記号
%EC[C]×拡張表現。元号(無い時は%Cと同じです)
%Ec[c]×拡張表現。地域固有の日付時刻表現(無い時は%cと同じです)
%EX[X]×拡張表現。地域固有の時刻表現(無い時は%Xと同じです)
%Ex[x]×拡張表現。地域固有の日付表現(無い時は%xと同じです)
%EY[Y]×拡張表現。元号付きの年、完全表記。平成元年のような、こだわり表記が出来ます。(無い時は%Yと同じです)
%Ey[y]×拡張表現。元号で数えた時の、年の数字(無い時は%yと同じです)
%Od[d]×拡張表現。地域固有の日表現。最大桁数になるまで、左を0で埋めます。(無い時は%dと同じです)
%Oe[e]×拡張表現。地域固有の日表現。最大桁数になるまで、左を半角空白で埋めます。(無い時は%eと同じです)
%OH[H]×拡張表現。地域固有の時表現(24時間)(無い時は%Hと同じです)
%OI[I]×拡張表現。地域固有の時表現(12時間)(無い時は%Iと同じです)
%OM[M]×拡張表現。地域固有の分表現(無い時は%Mと同じです)
%Om[m]×拡張表現。地域固有の月表現(無い時は%mと同じです)
%OS[S]×拡張表現。地域固有の秒表現(無い時は%Sと同じです)
%OU[U]×拡張表現。地域固有の週番号表現。その年の最初の日曜日から1週目。その前日までは00相当(無い時は%Uと同じです)
%Ou[u]×拡張表現。地域固有の曜日番号表現。月曜日が1で、7まで(無い時は%uと同じです)
%OV[V]×拡張表現。地域固有の週番号表現。ISO 8601の規定通り。週の最初は月曜日。1月1日を含む週は、所属日の多い年に含めます。(無い時は%Vと同じです)
%OW[W]×拡張表現。地域固有の週番号表現。その年の最初の月曜日から1週目。その前日までは00相当(無い時は%Wと同じです)
%Ow[w]×拡張表現。地域固有の曜日番号表現。日曜日が0で、6まで(無い時は%wと同じです)
%Oy[y]×拡張表現。地域固有の西暦年下2桁表現(無い時は%yと同じです)


==
関連ページ:
    ▼strftime - 時刻を文字列に変換する
    ▼AWKの時刻取得機能(▼ABC順)
    ▼AWKプログラムを書く(▼ABC順)
    ▼AWK
    ▼制作メモ
    ▼目次
    > strftimeの書式一覧。 Gawk for Windows編
    strftimeの書式一覧。 mawk MBCS (32bit版)編
(2010年6月26日追加。書式の説明文と誤記訂正)

strftimeの書式一覧。 mawk MBCS (32bit版)編 - AWK

AWKのstrftime関数 ▲
互換性の欄は、他のWindows用AWK処理系(Gawk on Windows 3.1.7 / Gawk for Windows 3.1.6)で確認しました。「△ = 表現が異なる処理系がある」「× = サポートしていない処理系がある」です。

サポートしている strftime 書式(機能別)
サポートしている strftime 書式(ABC順)
書式調査資料

mawk MBCS (32bit版) 1.3.3がサポートしている strftime 書式(機能別)
書式(機能別)実行結果の例互換性説明
-- %文字、特殊文字 --
%%[%]○パーセント記号
%t[    ]×タブ文字
%n[
]
×改行
-- 年、月、日、世紀 --
%Y[2001]○西暦年
%m[02]○月(01-12)
%d[03]○日(01-31)
%C[20]×世紀。西暦年から下位2桁を除去
%y[01]○西暦年の下2桁(00-99)
%B[February]△月名
%b[Feb]△月名の省略形
%j[034]○年の初めから数えた日数(001-366)
%Oy[01]×拡張表現。地域固有の西暦年下2桁表現(無い時は%yと同じです)
%EC[20]×拡張表現。元号(無い時は%Cと同じです)
%EY[2001]×拡張表現。元号付きの年、完全表記。平成元年のような、こだわり表記が出来ます。(無い時は%Yと同じです)
%Ey[01]×拡張表現。元号で数えた時の、年の数字(無い時は%yと同じです)
%Om[02]×拡張表現。地域固有の月表現(無い時は%mと同じです)
%h[Feb]×%bと同じです。月名の省略形(例。Aug)
%e[ 3]×日。1桁の時は左に半角空白( 1-31)
%Oe[ 3]×拡張表現。地域固有の日表現。最大桁数になるまで、左を半角空白で埋めます。(無い時は%eと同じです)
%Od[03]×拡張表現。地域固有の日表現。最大桁数になるまで、左を0で埋めます。(無い時は%dと同じです)
-- 時、分、秒 --
%H[04]○時。24時間表記(00-23)
%M[05]○分(00-59)
%S[06]○秒(00-59)。閏秒を表示するシステムの場合は61秒までの可能性
%I[04]○時。12時間表記(01-12)
%p[AM]△午前/午後の大文字
%k[ 4]×時。24時間表記で、1桁の時は左に半角空白( 0-23)
%l[ 4]×時。12時間表記で、1桁の時は左に半角空白( 0-12)
%OH[04]×拡張表現。地域固有の時表現(24時間)(無い時は%Hと同じです)
%OI[04]×拡張表現。地域固有の時表現(12時間)(無い時は%Iと同じです)
%OM[05]×拡張表現。地域固有の分表現(無い時は%Mと同じです)
%OS[06]×拡張表現。地域固有の秒表現(無い時は%Sと同じです)
-- 曜日、週番号 --
%A[Saturday]△曜日
%a[Sat]△曜日の省略形
%w[6]○曜日番号。日曜日が0(0-6)
%u[6]×曜日番号。月曜日が1(1-7)
%U[04]○週番号。その年の最初の日曜日から1週目。最初の日曜日の前日までは00。(00-53)
%W[05]○週番号。その年の最初の月曜日から1週目。最初の月曜日の前日までは00。(00-53)
%V[05]×週番号。ISO 8601週単位表記。週の最初は月曜日。1月1日を含む週は、所属日の多い年に含めます。
%Ow[6]×拡張表現。地域固有の曜日番号表現。日曜日が0で、6まで(無い時は%wと同じです)
%Ou[6]×拡張表現。地域固有の曜日番号表現。月曜日が1で、7まで(無い時は%uと同じです)
%OU[04]×拡張表現。地域固有の週番号表現。その年の最初の日曜日から1週目。その前日までは00相当(無い時は%Uと同じです)
%OW[05]×拡張表現。地域固有の週番号表現。その年の最初の月曜日から1週目。その前日までは00相当(無い時は%Wと同じです)
%OV[05]×拡張表現。地域固有の週番号表現。ISO 8601の規定通り。週の最初は月曜日。1月1日を含む週は、所属日の多い年に含めます。(無い時は%Vと同じです)
-- タイムゾーンは、非サポートです --
-- 組み合わせ(米国仕様) --
%x[Sat Feb 3 2001]△一般的な年月日表記
%Ex[Sat Feb 3 2001]×拡張表現。地域固有の日付表現(無い時は%xと同じです)
%D[02/03/01]×米国で一般的な年月日(%m/%d/%y)
%v[03-FEB-2001]×VMSフォーマットの日付(例 09-MAR-2039)
%X[04:05:06]△一般的な時刻表記。年月日は含みません。
%EX[04:05:06]×拡張表現。地域固有の時刻表現(無い時は%Xと同じです)
%T[04:05:06]×24 時間表記の時分秒 (%H:%M:%S)
%r[04:05:06 AM]×12時間表記の時分秒+午前午後(%I:%M:%S %p)
%R[04:05]×24時間表記の時分(%H:%M)
%c[Sat Feb 3 04:05:06 2001]△一般的な年月日と時刻
%Ec[Sat Feb 3 04:05:06 2001]×拡張表現。地域固有の日付時刻表現(無い時は%cと同じです)


mawk MBCS (32bit版) 1.3.3がサポートしている strftime 書式(ABC順)
書式(ABC順)実行結果の例互換性説明
%A[Saturday]△曜日
%a[Sat]△曜日の省略形
%B[February]△月名
%b[Feb]△月名の省略形
%C[20]×世紀。西暦年から下位2桁を除去
%c[Sat Feb 3 04:05:06 2001]△一般的な年月日と時刻
%D[02/03/01]×米国で一般的な年月日(%m/%d/%y)
%d[03]○日(01-31)
%e[ 3]×日。1桁の時は左に半角空白( 1-31)
%EC[20]×拡張表現。元号(無い時は%Cと同じです)
%Ec[Sat Feb 3 04:05:06 2001]×拡張表現。地域固有の日付時刻表現(無い時は%cと同じです)
%EX[04:05:06]×拡張表現。地域固有の時刻表現(無い時は%Xと同じです)
%Ex[Sat Feb 3 2001]×拡張表現。地域固有の日付表現(無い時は%xと同じです)
%EY[2001]×拡張表現。元号付きの年、完全表記。平成元年のような、こだわり表記が出来ます。(無い時は%Yと同じです)
%Ey[01]×拡張表現。元号で数えた時の、年の数字(無い時は%yと同じです)
%H[04]○時。24時間表記(00-23)
%h[Feb]×%bと同じです。月名の省略形(例。Aug)
%I[04]○時。12時間表記(01-12)
%j[034]○年の初めから数えた日数(001-366)
%k[ 4]×時。24時間表記で、1桁の時は左に半角空白( 0-23)
%l[ 4]×時。12時間表記で、1桁の時は左に半角空白( 0-12)
%M[05]○分(00-59)
%m[02]○月(01-12)
%n[
]
×改行
%Od[03]×拡張表現。地域固有の日表現。最大桁数になるまで、左を0で埋めます。(無い時は%dと同じです)
%Oe[ 3]×拡張表現。地域固有の日表現。最大桁数になるまで、左を半角空白で埋めます。(無い時は%eと同じです)
%OH[04]×拡張表現。地域固有の時表現(24時間)(無い時は%Hと同じです)
%OI[04]×拡張表現。地域固有の時表現(12時間)(無い時は%Iと同じです)
%OM[05]×拡張表現。地域固有の分表現(無い時は%Mと同じです)
%Om[02]×拡張表現。地域固有の月表現(無い時は%mと同じです)
%OS[06]×拡張表現。地域固有の秒表現(無い時は%Sと同じです)
%OU[04]×拡張表現。地域固有の週番号表現。その年の最初の日曜日から1週目。その前日までは00相当(無い時は%Uと同じです)
%Ou[6]×拡張表現。地域固有の曜日番号表現。月曜日が1で、7まで(無い時は%uと同じです)
%OV[05]×拡張表現。地域固有の週番号表現。ISO 8601の規定通り。週の最初は月曜日。1月1日を含む週は、所属日の多い年に含めます。(無い時は%Vと同じです)
%OW[05]×拡張表現。地域固有の週番号表現。その年の最初の月曜日から1週目。その前日までは00相当(無い時は%Wと同じです)
%Ow[6]×拡張表現。地域固有の曜日番号表現。日曜日が0で、6まで(無い時は%wと同じです)
%Oy[01]×拡張表現。地域固有の西暦年下2桁表現(無い時は%yと同じです)
%p[AM]△午前/午後の大文字
%R[04:05]×24時間表記の時分(%H:%M)
%r[04:05:06 AM]×12時間表記の時分秒+午前午後(%I:%M:%S %p)
%S[06]○秒(00-59)。閏秒を表示するシステムの場合は61秒までの可能性
%T[04:05:06]×24 時間表記の時分秒 (%H:%M:%S)
%t[    ]×タブ文字
%U[04]○週番号。その年の最初の日曜日から1週目。最初の日曜日の前日までは00。(00-53)
%u[6]×曜日番号。月曜日が1(1-7)
%W[05]○週番号。その年の最初の月曜日から1週目。最初の月曜日の前日までは00。(00-53)
%w[6]○曜日番号。日曜日が0(0-6)
%X[04:05:06]△一般的な時刻表記。年月日は含みません。
%x[Sat Feb 3 2001]△一般的な年月日表記
%V[05]×週番号。ISO 8601週単位表記。週の最初は月曜日。1月1日を含む週は、所属日の多い年に含めます。
%v[03-FEB-2001]×VMSフォーマットの日付(例 09-MAR-2039)
%Y[2001]○西暦年
%y[01]○西暦年の下2桁(00-99)
%%[%]○パーセント記号


# --------------------------------------------------------------
# 基礎資料。strftime書式調査テスト結果
#
テストに使った書式は、各awk処理系の説明書の他、C言語の同名関数で見かけた書式も混ぜました。
◎の意味は、「日本語対応として望ましい」です。
色が付いている所は、未サポート、もしくは正しいとされる表記が複数あって、互換性に乏しい所です。

調査したAWK処理系 = mawk MBCS (32bit版) 1.3.3 (1998年8月22日版)
OS = Windows XP SP3 日本語版
調査に使った関数 = strftime
環境変数の追加設定無し = TZやLC_系環境変数の指定無し

# -------------------------------
# テスト1。2001年2月3日4時5分6秒 UTC+9 = 981140706
# -------------------------------
書式(ABC順)実行結果判定説明
%A[Saturday]○
米国
曜日
%a[Sat]○
米国
曜日の省略形
%B[February]○
米国
月名
%b[Feb]○
米国
月名の省略形
%C[20]○世紀。西暦年から下位2桁を除去
%c[Sat Feb 3 04:05:06 2001]○
米国
一般的な年月日と時刻
%D[02/03/01]○米国で一般的な年月日(%m/%d/%y)
%d[03]○日(01-31)
%e[ 3]○日。1桁の時は左に半角空白( 1-31)
%F[%F]×年月日。ISO 8601形式。%Y-%m-%d
%G[%G]×年。ISO 8601週単位表記。年末年始で、%Yと異なります。
%g[%g]×年。ISO 8601週単位表記の下2桁(00-99)
%H[04]○時。24時間表記(00-23)
%h[Feb]○%bと同じです。月名の省略形(例。Aug)
%I[04]○時。12時間表記(01-12)
%j[034]○年の初めから数えた日数(001-366)
%k[ 4]○時。24時間表記で、1桁の時は左に半角空白( 0-23)
%l[ 4]○時。12時間表記で、1桁の時は左に半角空白( 0-12)
%M[05]○分(00-59)
%m[02]○月(01-12)
%n[
]
○改行
%P[%P]×午前/午後の小文字
%p[AM]○午前/午後の大文字
%R[04:05]○24時間表記の時分(%H:%M)
%r[04:05:06 AM]○12時間表記の時分秒+午前午後(%I:%M:%S %p)
%S[06]○秒(00-59)。閏秒を表示するシステムの場合は61秒までの可能性
%s[%s]×基準時刻からの秒数。1970年1月1日0時(UTC)から
%T[04:05:06]○24 時間表記の時分秒 (%H:%M:%S)
%t[    ]○タブ文字
%U[04]○週番号。その年の最初の日曜日から1週目。最初の日曜日の前日までは00。(00-53)
%u[6]○曜日番号。月曜日が1(1-7)
%W[05]○週番号。その年の最初の月曜日から1週目。最初の月曜日の前日までは00。(00-53)
%w[6]○曜日番号。日曜日が0(0-6)
%X[04:05:06]○一般的な時刻表記。年月日は含みません。
%x[Sat Feb 3 2001]○
米国
一般的な年月日表記
%V[05]○週番号。ISO 8601週単位表記。週の最初は月曜日。1月1日を含む週は、所属日の多い年に含めます。
%v[03-FEB-2001]○VMSフォーマットの日付(例 09-MAR-2039)
%Y[2001]○西暦年
%y[01]○西暦年の下2桁(00-99)
%Z[PST]×タイムゾーン。名前または省略形。不明な場合は空です。
%z[%z]×タイムゾーン。数値形式(例 +0900)。不明な場合は空です。
%%[%]○パーセント記号
%EC[20]○
米国
拡張表現。元号(無い時は%Cと同じです)
%Ec[Sat Feb 3 04:05:06 2001]○
米国
拡張表現。地域固有の日付時刻表現(無い時は%cと同じです)
%EX[04:05:06]○拡張表現。地域固有の時刻表現(無い時は%Xと同じです)
%Ex[Sat Feb 3 2001]○
米国
拡張表現。地域固有の日付表現(無い時は%xと同じです)
%EY[2001]○
米国
拡張表現。元号付きの年、完全表記。平成元年のような、こだわり表記が出来ます。(無い時は%Yと同じです)
%Ey[01]○
米国
拡張表現。元号で数えた時の、年の数字(無い時は%yと同じです)
%Od[03]○拡張表現。地域固有の日表現。最大桁数になるまで、左を0で埋めます。(無い時は%dと同じです)
%Oe[ 3]○拡張表現。地域固有の日表現。最大桁数になるまで、左を半角空白で埋めます。(無い時は%eと同じです)
%OH[04]○拡張表現。地域固有の時表現(24時間)(無い時は%Hと同じです)
%OI[04]○拡張表現。地域固有の時表現(12時間)(無い時は%Iと同じです)
%OM[05]○拡張表現。地域固有の分表現(無い時は%Mと同じです)
%Om[02]○拡張表現。地域固有の月表現(無い時は%mと同じです)
%OS[06]○拡張表現。地域固有の秒表現(無い時は%Sと同じです)
%OU[04]○拡張表現。地域固有の週番号表現。その年の最初の日曜日から1週目。その前日までは00相当(無い時は%Uと同じです)
%Ou[6]○拡張表現。地域固有の曜日番号表現。月曜日が1で、7まで(無い時は%uと同じです)
%OV[05]○拡張表現。地域固有の週番号表現。ISO 8601の規定通り。週の最初は月曜日。1月1日を含む週は、所属日の多い年に含めます。(無い時は%Vと同じです)
%OW[05]○拡張表現。地域固有の週番号表現。その年の最初の月曜日から1週目。その前日までは00相当(無い時は%Wと同じです)
%Ow[6]○拡張表現。地域固有の曜日番号表現。日曜日が0で、6まで(無い時は%wと同じです)
%Oy[01]○拡張表現。地域固有の西暦年下2桁表現(無い時は%yと同じです)

# -------------------------------
# テスト2。2010年1月1日23時59分59秒 UTC+9 = 1262357999
# -------------------------------
書式(ABC順)実行結果判定説明
%A[Friday]○
米国
曜日
%a[Fri]○
米国
曜日の省略形
%B[January]○
米国
月名
%b[Jan]○
米国
月名の省略形
%C[20]○世紀。西暦年から下位2桁を除去
%c[Fri Jan 1 23:59:59 2010]○
米国
一般的な年月日と時刻
%D[01/01/10]○米国で一般的な年月日(%m/%d/%y)
%d[01]○日(01-31)
%e[ 1]○日。1桁の時は左に半角空白( 1-31)
%F[%F]×年月日。ISO 8601形式。%Y-%m-%d
%G[%G]×年。ISO 8601週単位表記。年末年始で、%Yと異なります。
%g[%g]×年。ISO 8601週単位表記の下2桁(00-99)
%H[23]○時。24時間表記(00-23)
%h[Jan]○%bと同じです。月名の省略形(例。Aug)
%I[11]○時。12時間表記(01-12)
%j[001]○年の初めから数えた日数(001-366)
%k[23]○時。24時間表記で、1桁の時は左に半角空白( 0-23)
%l[11]○時。12時間表記で、1桁の時は左に半角空白( 0-12)
%M[59]○分(00-59)
%m[01]○月(01-12)
%n[
]
○改行
%P[%P]×午前/午後の小文字
%p[PM]○午前/午後の大文字
%R[23:59]○24時間表記の時分(%H:%M)
%r[11:59:59 PM]○12時間表記の時分秒+午前午後(%I:%M:%S %p)
%S[59]○秒(00-59)。閏秒を表示するシステムの場合は61秒までの可能性
%s[%s]×基準時刻からの秒数。1970年1月1日0時(UTC)から
%T[23:59:59]○24 時間表記の時分秒 (%H:%M:%S)
%t[    ]○タブ文字
%U[00]○週番号。その年の最初の日曜日から1週目。最初の日曜日の前日までは00。(00-53)
%u[5]○曜日番号。月曜日が1(1-7)
%W[00]○週番号。その年の最初の月曜日から1週目。最初の月曜日の前日までは00。(00-53)
%w[5]○曜日番号。日曜日が0(0-6)
%X[23:59:59]○一般的な時刻表記。年月日は含みません。
%x[Fri Jan 1 2010]○
米国
一般的な年月日表記
%V[53]○週番号。ISO 8601週単位表記。週の最初は月曜日。1月1日を含む週は、所属日の多い年に含めます。
%v[01-JAN-2010]○VMSフォーマットの日付(例 09-MAR-2039)
%Y[2010]○西暦年
%y[10]○西暦年の下2桁(00-99)
%Z[PST]×タイムゾーン。名前または省略形。不明な場合は空です。
%z[%z]×タイムゾーン。数値形式(例 +0900)。不明な場合は空です。
%%[%]○パーセント記号
%EC[20]○
米国
拡張表現。元号(無い時は%Cと同じです)
%EX[23:59:59]○拡張表現。地域固有の時刻表現(無い時は%Xと同じです)
%Ec[Fri Jan 1 23:59:59 2010]○
米国
拡張表現。地域固有の日付時刻表現(無い時は%cと同じです)
%Ex[Fri Jan 1 2010]○
米国
拡張表現。地域固有の日付表現(無い時は%xと同じです)
%EY[2010]○
米国
拡張表現。元号付きの年、完全表記。平成元年のような、こだわり表記が出来ます。(無い時は%Yと同じです)
%Ey[10]○
米国
拡張表現。元号で数えた時の、年の数字(無い時は%yと同じです)
%Od[01]○拡張表現。地域固有の日表現。最大桁数になるまで、左を0で埋めます。(無い時は%dと同じです)
%Oe[ 1]○拡張表現。地域固有の日表現。最大桁数になるまで、左を半角空白で埋めます。(無い時は%eと同じです)
%OH[23]○拡張表現。地域固有の時表現(24時間)(無い時は%Hと同じです)
%OI[11]○拡張表現。地域固有の時表現(12時間)(無い時は%Iと同じです)
%OM[59]○拡張表現。地域固有の分表現(無い時は%Mと同じです)
%Om[01]○拡張表現。地域固有の月表現(無い時は%mと同じです)
%OS[59]○拡張表現。地域固有の秒表現(無い時は%Sと同じです)
%OU[00]○拡張表現。地域固有の週番号表現。その年の最初の日曜日から1週目。その前日までは00相当(無い時は%Uと同じです)
%Ou[5]○拡張表現。地域固有の曜日番号表現。月曜日が1で、7まで(無い時は%uと同じです)
%OV[53]○拡張表現。地域固有の週番号表現。ISO 8601の規定通り。週の最初は月曜日。1月1日を含む週は、所属日の多い年に含めます。(無い時は%Vと同じです)
%OW[00]○拡張表現。地域固有の週番号表現。その年の最初の月曜日から1週目。その前日までは00相当(無い時は%Wと同じです)
%Ow[5]○拡張表現。地域固有の曜日番号表現。日曜日が0で、6まで(無い時は%wと同じです)
%Oy[10]○拡張表現。地域固有の西暦年下2桁表現(無い時は%yと同じです)

==
関連ページ:
    ▼strftime - 時刻を文字列に変換する
    ▼AWKの時刻取得機能(▼ABC順)
    ▼AWKプログラムを書く(▼ABC順)
    ▼AWK
    ▼制作メモ
    > ▼AWKの入出力とコマンド実行機能
    +
    strftimeの書式一覧。 Gawk on Windows編
    strftimeの書式一覧。 Gawk for Windows編
(2010年6月26日追加。書式の説明文と誤記訂正)