**** 処理系共通の注意点
o Windows版では、コマンドの括り文字は「"」(= 二重引用符)だけの処理系が、ほとんどです。
+ 「"」を文字列中に書きたい時は、「\"」と書きます。
**** 特定の処理系に関する注意点
** Gawk系特有の動作
o Windows版の各処理系では、「|& コマンド」や「コマンド |&」の書き方は非対応です。
+ 確認したバージョン
+ Gawk on Windows 3.1.7
+ Gawk for Windows 3.1.6
o UTF-8のテキストファイルを読み込む場合、1行目に限り、$0と $1について、表示されている文字数よりも多く数える事があります。
+ Gawk on Windows 3.1.7 = 1文字多く数えます。
+ Gawk for Windows 3.1.6 = 2文字多く数えます。
+ 原因は、UTF-8で保存したファイルの先頭にあった、UNICODE特有の見えない文字(= BOM = EF BB BF)。
+ Windows XPのメモ帳で保存する時に UTF-8を指定すると、BOMが付くみたいです。
+ メモ帳に限らず、Windows 上の UTF-8ファイルは、BOMが付く方が便利です。(= ファイルを開く時に文字化けしません。)
+ 対策方法は「UTF-8のファイルから、BOMを除去する方法」
==
関連ページ:
▼AWKの入出力関数とコマンド実行機能(▼ABC順)
▼AWKプログラムを書く(▼ABC順)
▼AWK
▼制作メモ
> ファイルからデータを読み込む
タブ区切りでファイルを読み込む
AWKでバイナリ出力する(mawk, Gawk専用)
+
文字列操作関数使用時の注意点まとめ
数値計算関数使用時の注意点まとめ
時刻取得関数を使う時の注意点まとめ
配列を使う時の注意点まとめ
2010年9月5日日曜日
mktime = 特定日時の時刻値(= 基準時刻からの経過秒数)を調べる(Gawk専用) - AWK
○Gawk on Windows ○Gawk ×mawk32 ×Mawk ×awk
特定日時の時刻値(= 基準時刻からの経過秒数 = Unix Time)を調べます。o 時刻文字列に変換したい時は、「strftime = 時刻を文字列に変換する」
**** 書式
--------
mktime( 時刻文字列 )
--------
o この関数は、Gawkの拡張機能です。
o 日時文字列 -- 数字の並びで指定します。
+ 時刻文字列の書き方は、"年 月 日 時 分 秒 [夏時間フラグ]"
+ 書き方の例。"2010 3 9 23 59 59" もしくは、"2010 3 9 23 59 59 0"
+ 月などの前ゼロはお好みで。付けても付けなくても、同じ結果になります。
+ 詳しい書き方は、下の通りです。
o 戻り値 -- -1以外 = 基準時刻からの経過秒数(= Unix time) / -1 = 変換失敗
+ 通常、UTC(= 協定世界時)で1970年1月1日の0時からの経過秒数。但し、閏秒は数えません。
** 日時文字列 の書き方について
o 夏時間フラグは、省略も出来ます。
o 年以外は、0や負の値を指定する事も出来ます。
+ 月の場合、0月は、前年の12月を指します。-1なら11月です。
+ 日の場合、0日は、前月の最終日を指します。-1なら2日前です。
+ 時分秒は、素直に計算出来ます。-1時なら1時間前です。
o 数字の間に入れるのは、半角空白です。2つ入れたり、タブ文字を入れても大丈夫でした。
o 夏時間フラグは、1 = 夏時間 / 0 = 標準時間 / -1 = 自動判定(初期値)
o 夏時間の自動判定方法は、処理系をコンパイルした時に使ったC言語処理系に依存します。
o 今の所、指定出来る時刻は次の通りです。
+ 世界協定時: 1970年1月1日0時0分0秒(UTC)から 2038年1月19日3時14分7秒(UTC)まで
+ 日本標準時: 1970年1月1日9時0分0秒から 2038年1月19日12時14分7秒まで
+ なお、2038年以降指定出来ない問題は、近い将来登場する(おそらく64ビットOS用の)処理系で解決される見通しです。
**** 使用例
--------
BEGIN {
print mktime("2010 12 31 -12 0 0"); # 12時間前の時刻値を求めます。
print strftime("%Y/%m/%d %H:%M:%S", mktime()); # 文字列にしたい時
}
--------
o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。
**** 機能
o 特定日時の時刻値(= 基準時刻からの経過秒数 = Unix Time)を調べます。
o 基準時刻は、通常、UTC(= 協定世界時)の1970年1月1日の0時です。閏秒は数えません。
o 詳しくは、「systime = 現在の時刻値(= 基準時刻からの経過秒数)を調べる」の通りです。
o 戻り値は、整数です。読み易い文字列に変換したい時には、strftimeを使います。
o この機能をサポートしていない処理系があります。
** 処理系に依存する動作
o この機能をサポートしている処理系は、次の通りです。
+ Gawk on Windows 3.1.7
+ Gawk for Windows 3.1.6
o この機能は、AWKのコンパイル環境によっては、2038年問題を抱えています。
o 2038年1月19日3時14分7秒を超える時刻を指定すると、-1を返す処理系
+ Gawk on Windows 3.1.7
+ Gawk for Windows 3.1.6
**** 確認した処理系
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
▼制作メモ
> srand = 乱数の種を設定する
strftime = 時刻を文字列に変換する(Gawk, mawk32専用)
+
systime = 現在の時刻値(= 基準時刻からの経過秒数)を調べる(Gawk, mawk32専用)
ツール。systime関数とsrand関数の戻り値予想(Unix time)
(2010年6月23日追加。戻り値の内容はAWKの仕様外)
strtonum = 10進数、8進数、16進数の文字列を数値に変換する(Gawk専用) - AWK
○Gawk on Windows ○Gawk ×mawk32 ×Mawk ×awk
指定された文字列を、数値に変換します。o 数字の前にゼロが付いている時、8進数として解釈します。
o 8進数や16進数の場合、正の整数部分だけを変換します。
**** 書式
--------
strtonum( 変換したい値 )
--------
o この関数は、Gawkの拡張機能です。
o 変換したい値 -- 数値に変換したい文字列(例:"39.39だよ")
+ 先頭が 0(= 数字のゼロ)で後ろに数字が続く時、8進数であると解釈します。
+ 先頭が 0x もしくは 0X で後ろに数字が続く時、16進数であると解釈します。
o 戻り値 -- 変換結果
**** 使用例
--------
BEGIN {
print strtonum("39.3"); # 39.3
print "# 以下、計算結果の確認です。";
print strtonum("-39.3aaa"); # -39.3
print strtonum("012"); # 8進数 = 8 + 2 = 10
print strtonum("0x12"); # 16進数 = 16 + 2 = 18
print strtonum("0X12"); # 16進数 = 16 + 2 = 18
print strtonum("Mikusan"); # 0
}
--------
o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。
**** 機能
o 文字列から数値に変換します。
o 8進数や16進数の場合、正の整数部分だけを変換します。
o 先頭が 0 (= 数字のゼロ)で後ろに数字が続く時、8進数と解釈します。
+ 例えば、「012」は 8進数、「0.12」や「-012」は10進数と解釈します。
o 先頭が 0x もしくは 0X で後ろに数字が続く時、16進数と解釈します。
+ 例えば、「0x12」は 16進数、「-0x12」や「0x-12」は 10進数と解釈して0になります。
o その他の場合、10進数と解釈します。
o 実数を指定すると、6桁までに丸めたり、浮動小数点形式になります。
+ この動作を変えたい時は、変数 CONVFMTを使います。詳しくは、「数値から文字列にする時に、実数を7桁以上表示させる方法」
o 数値の後ろに文字列が続いていても大丈夫です。
o 先頭に数値以外の文字がある場合
+ 半角空白は読み飛ばし、10進数と解釈します。
+ それ以外の文字があると、0 を返します。
o この機能をサポートしていない処理系があります。
** 処理系に依存する動作
o この機能をサポートしている処理系は、次の通りです。
+ Gawk on Windows 3.1.7
+ Gawk for Windows 3.1.6
o この関数で変換した結果についてです。
o 数値の有効桁数は、15桁程度です。C言語のdouble型に依存しています。
o 整数の値を18桁以上表示する時、処理系毎に表示形式が異なります。
+ 常に整数表示、かつ誤差をそのまま残す処理系 = Gawk for Windows 3.1.6
+ 常に整数表示、かつ、およそ18桁目以降を0で埋める処理系 = Gawk on Windows 3.1.7と
**** メモ
o Gawk以外の処理系の場合、10進数については、文字列の後ろに「+ 0」をつける事で数値化出来ます。
+ 文字列を実数に変換する時、6桁までに丸めたりしますので、必要に応じて変数 CONVFMTを使います。
**** 確認した処理系
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
▼制作メモ
> sqrt = 平方根を求める
sin = 正弦を求める
> split = 文字列を分割する
sprintf = 文字列を組み立てる
+
int = 実数や文字列を整数化する
(2010年9月5日変更。表現の訂正。8進数と16進数の判定は、キーワード 0 0x 0Xの後ろに数字が続く事が条件)