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 これから読み込むファイル名を変更したい時は、ARGVARGCを変更します。

**** 書式
--------
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現在読み込み中ファイルの名前
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日追加。手動更新した場合)

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日追加。書式の説明文と誤記訂正)