2010年9月30日木曜日

文字列中で使用出来る特殊文字 - AWK

AWKの文字列操作機能
AWKの正規表現
○(注記あり)Gawk on Windows ○(注記あり)Gawk ○(注記あり)mawk32 ○(注記あり)Mawk ○awk
AWKでは、文字列に含める事が難しい文字について、\ から始まる特殊文字の形で指定する事が出来ます。

o 使用例
--------
BEGIN {
  printf("ミクさん、\\はネギの印ではありませんよ、、、多分。\n");
}
--------


文字列中で使用出来る特殊文字
記号意味
\\\ 自身
\"" (= 二重引用符)自身
\n0x0a = 改行
\r0x0d = 復帰。Windows版では、バイナリモードの時の改行でお世話になります。
\t0x09 = タブ文字
\v0x0b = 水平タブ。普通は使いません。
\a0x07 = ベル(音が鳴ります)。普通は使いません。
\b0x08 = バックスペース。普通は使いません。
\f0x0c = 改ページ。普通は使いません。
\x12文字コードの16進数表現。コードが2桁に満たない時、前ゼロで埋めます。
\012文字コードの8進数表現。コードが3桁に満たない時、前ゼロで埋めます。
処理系に依存する特殊文字
\// 自身。正規表現以外の文字列に含める場合、処理系によって動作が異なります。
o オリジナルは常に変換します。
o mawkは変換しません。
o Gawkは警告が出ますが変換します。
\'' (= 一重の引用符)自身。処理系によって動作が異なります。
o オリジナルは常に変換します。
o mawkは正規表現の時だけ変換します。
o Gawkは文字列の時だけ、警告を出しながら変換します。


**** メモ
o \/ の規則については、オリジナルでの採用に対して他の2つの処理系が消極的な、珍しいケースになりました。
    + オリジナルは、正規表現と交互に入力する時に楽なように、\/ を常に / に変換します。
    + 一方、mawkやGawkは、非対応だったり、警告を出したりしています。他言語との互換性を重視しているみたいです。
o 8進数や16進数の使用例は、「AWKプログラムの中で、8進数や16進数を使う方法


**** 確認した処理系
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
    ▼制作メモ
    > ツール。文字列からアスキーコードを調べます(String to ASCII)
    length = 文字列や配列の長さを調べる
    index = 文字列の登場位置を調べる
    +
    AWKの正規表現で使う書式
    AWKプログラムの中で、8進数や16進数を使う方法
    sprintf = 文字列を組み立てる
    printf = 文字列を組み立ててファイルなどに書き出す
    print = ファイルなどに書き出す
(2010年10月1日追加。「'」(= 一重の引用符)も変換対象)

Googleドキュメントに、ファイルをそのままの形でアップロードする方法

Googleドキュメント
Googleドキュメントは、ファイルをそのままの形でアップロードする事も出来ます。
ポイントは、アップロードする時の変換オプションで、形式変換のチェックを外す事です。


**** 手順
o Google ドキュメントにログインします。
   + 詳しい手順は「Google ドキュメントにログインする方法

o 左側上方にある「アップロード」ボタンを押します。
o 「ファイルのアップロード」画面に移動しますので、画面中央辺りにある、「アップロードするファイルを選択」リンクを押します。
o アップロードしたいファイルを選択して、右下の「開く」ボタンを押します。
o その下にある見出し「変換オプションを選択」で、次の項目のチェックを外します。
   + 「文書、プレゼンテーション、スプレッドシートを対応する Google ドキュメントの形式に変換する」
o 一番下の左側。アップロード先と、「限定公開」になっている事を確認して、「アップロードを開始」ボタンを押します。

o アップロード後に内容を確認したい時は、ファイルのプレビューは出来ませんので、ダウンロードリンクを押して、実際にダウンロードして確認します。


==
関連ページ:
    ▼Google ドキュメント
    ▼ホームページを作る
    ▼制作メモ
    > Google ドキュメントのドキュメントを完全に削除する
    Google ドキュメントにログインする
    Google ドキュメントでExcelファイル(xls)を開く

2010年9月29日水曜日

Gawkの操作説明書(マニュアル)をオンラインで見る方法 - AWK

AWKプログラムを動かす
Gawk本家にあるのは英語版だけですが、有志の方達が、個人で日本語に訳して公開しています。


**** Gawkの最新説明書の場所(推定。2010年12月現在)
** 日本語訳
o Web検索します。検索キーワードは「GNU Awk ユーザーズガイド」
o Googleで検索すると、日本 GNU AWK ユーザー会 (JGAUC)のページがトップに来ていました。
   + GAWKの対応バージョンは、3.1.6。
   + トップページから辿る事が出来ないみたいですので、推敲中なのかもしれません。(リンクは省略します)

** オリジナル(英語)
o Gawk本家の説明書(= 英語です)は▽The GNU Awk User's Guide
o コマンドラインのオプションは、キーワード「Command-Line Options」でページ内検索
o 他の形式で表示させたい時は、▽一つ上のディレクトリから。分割HTMLやPDFなど、様々な形式で公開していました。


**** メモ
o ダウンロードして、インターネットを使用しない環境で利用する事も出来ます。


==
関連ページ:
    ▼AWKプログラムを動かす
    ▼AWK
    ▼制作メモ
    > mawkの操作説明書(マニュアル)をオンラインで見る方法
    the one true awk(オリジナルAWK)の実行オプション一覧
    AWKを実行する時に、プログラムファイルを複数指定する
    ▼AWKプログラムを書く
(2010年12月16日変更。日本語版ドキュメントの削除に対応)

mawkの操作説明書(マニュアル)をオンラインで見る方法 - AWK

AWKプログラムを動かす
Windows版のmawkの説明書は、実行物と一緒に入っていますので、探すのが少し面倒です。
と、最近まではそう思っていたのですが、Web検索で沢山見つかりました。

検索キーワードは「mawk man」

UNIX版の説明書で英語ですが、機能の有無とコマンドオプションを確認する位なら、十分役に立つと思います。
   + 実行物やシステムが違いますので、動作確認は必要です。


**** メモ
o mawkの説明書は、質実剛健といった感じです。
   + Gawkの教科書的な作りとは、大きく異なっていました。
   + 日本語で読みたい方は、mawk32付属の説明書 mawk.doc
o mawk説明書で指摘のあった RS 値変更の実例について興味のある方は 変数 RSのメモ欄へどうぞ


==
関連ページ:
    ▼AWKプログラムを動かす
    ▼AWK
    ▼制作メモ
    > the one true awk(オリジナルAWK)の実行オプション一覧
    AWKを実行する時に、プログラムファイルを複数指定する
    AWKプログラム実行時に変数を設定する
    ▼AWKプログラムを書く

2010年9月27日月曜日

パターンの書式と使い方 - AWK

AWKのパターンと制御文
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
AWKの特徴の1つ、パターンの書式は、大きく分けると3種類あります。

o 条件なし = 条件を書かないパターン
o 条件1つ = 行を取り出す条件を書くパターン
o 条件2つ = 開始条件と終了条件を書くパターン

パターンは、AWKプログラム内に複数並べて書く事が出来ます。
条件を2つ書く場合、少し変わった動きになりますので留意します。


**** 条件なし = 条件を書かないパターン
** 書式
--------
{ 行に対する処理 }
--------

o 行に対する処理 -- 1行毎に呼び出されます。省略する事も出来ます。

** 使用例
--------
{ print "毎行表示します。" $0 }
--------



**** 条件1つ = 行を取り出す条件を書くパターン
** 書式
--------
条件 { 行に対する処理 }
もしくは
条件
--------

o 条件 -- 行を取り出す条件を指定します。
o 行に対する処理 -- 省略する事も出来ます。括弧まで省略すると、print $0; になります。

** 使用例
--------
/ミクさん/ # 「ミクさん」が含まれている行を表示します
/ミクさん/ { print "「ミクさん」が含まれている行です。" $0; }

$1 ~ /ミクさん/ { print "1列目に「ミクさん」が含まれている行です。" $0; }
$1 == "ミクさん" { print "1列目が「ミクさん」とだけ書かれている行です。" $0; }

/ミクさん/ && /ネギ/ { print "「ミクさん」と「ネギ」が含まれている行です。" $0; }
/ミクさん/ || /ネギ/ { print "「ミクさん」もしくは「ネギ」が含まれている行です。" $0; }

BEGIN { print "プログラムの最初に1回実行します。"; }
END { print "プログラムの最後に1回実行します。"; }
--------

o 条件に /ミクさん/ と書くと、$0 ~ /ミクさん/ の意味になります。
o 正規表現の代わりに "ミクさん" と書くと、1 と同じ意味になって全行ヒットします。


**** 条件2つ = 開始条件と終了条件を書くパターン
** 書式
--------
開始条件, 終了条件 { 行に対する処理 }
もしくは
開始条件, 終了条件
--------

o 開始条件 -- この行から実行します。終了条件後、また探し始めます。
o 終了条件 -- この行までを実行します。
   + 入力ファイルを複数指定した場合、ファイルがつながっているものとみなします。
   + = 1つのファイルの読み込みが終わっても、終了条件が見つかるまでヒットします。
o 行に対する処理 -- 省略する事も出来ます。括弧まで省略すると、print $0; になります。

** 使用例
--------
/ミクさん/, /ネギ/ #「ミクさん」登場行から「ネギ」登場行までを表示します
/ミクさん/, /ネギ/ { print "「ミクさん」登場行から「ネギ」登場行まで。" $0; }
--------

o 「ネギ」登場行もヒットします。
   + 「ネギ」行が2行並んでいる時、最初の行だけヒットします。
o 「ネギ」登場行の後、「ミクさん」登場行が現れると、またヒットします。
o ファイルの終わりまで「ネギ」が登場しない場合、次の入力ファイルは「ネギ」が登場するまでヒットし続けます。


**** 確認した処理系
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
    ▼制作メモ
    > if = 条件に一致したら実行する
    else = ifで実行しない時に実行する
    switch = 選択肢を選んで実行する(Gawk専用)
    +
    AWKで最も短いプログラム
    AWKプログラムの基本パターン
(2010年9月28日追加。各パターンの構成要素説明に条件部分を追加)

2010年9月26日日曜日

JavaScriptで使うグローバルな名前を減らす方法 - Blogger

Bloggerブログの本文を書く。ラベルと貼り付けとHTMLモード
グローバルな名前を減らすと、JavaScriptを含む記事を並べて表示した時に、名前が重なり難くなります。
このブログで使っているのは、3つの方法です。

o ローカル変数を使う方法
o 一時的に使う変数や関数を、名前の無い関数の中に閉じ込める方法
o グローバル変数を1つだけ公開して、外から使いたい関数や変数をグローバル変数のプロパティにする方法


**** 手順
** ローカル変数を使う方法
o JavaScriptにおけるローカル変数とは、関数の中でのみ有効な変数の事です。
o 関数の引数(functionの直後にある丸括弧の中に書いた変数)の名前は、何も書かなくてもローカルになります。
o また、関数の中で変数を初めて使う場所で、「var 変数名; 」もしくは、「var 変数名 = 」の形で書くと、その変数名もローカルになります。
--------
<script type="text/javascript">
//<![CDATA[
<!--
function f(name) {
  var d = document;
  for (var i = 1; i <= 3; ++i) {     d.writeln("ミクさんが" + i + "人<\/br>");
    d.writeln( name +"さんが" + i + "人<\/br>");
  }
}

f("ネギ");
//-->
//]]>
</script>
--------

o この場合、変数 name, d, i は、関数 f の外から見えません。


** 一時的に使う変数や関数を、名前の無い関数の中に閉じ込める方法
o そして、中で使う変数には varを付けて、ローカル変数化します。
--------
<script type="text/javascript">
//<![CDATA[
<!--
(function(){
  var v = new Date();
  document.write("今日は" +v.getDate() + "日です。");
})()
//-->
//]]>
</script>
--------

o この場合、変数 v は無名関数の外から見えません。
o documentは、ブラウザーが用意しているグローバルな名前です。


** グローバル変数を1つだけ公開して、外から使いたい関数や変数をグローバル変数のプロパティにする方法
o ページ毎にキーワードを決めます。この例のキーワードは、MikuSan です。
o グローバル変数の名前を「MikuSan」、操作したいspanタグのidを「MikuSan_name」にする事で、他ページからの干渉を防ぎます。
--------
<script type="text/javascript">
//<![CDATA[
<!--
var MikuSan = new (function() {
  var $ = function(v) {
    return document.getElementById("MikuSan_" + v);
  }
  this.setSpan = function(span_id, message) {
    $(span_id).innerHTML = message;
  return true;
  }
})();
//-->
//]]>
</script>
<form>
<input type="button" value="挨拶ボタン" onclick="return MikuSan.setSpan('name', 'こんにちは、ミクさん。');">
<span id="MikuSan_name"></span>
</form>
--------

o この場合、var を使って宣言したローカル変数 $は、関数 f の外から見えません。
o 関数 f の外から見えるのは、this. を使って宣言したプロパティ setSpan です。
o 変数 MikuSan はグローバル変数です。関数の外で var を付けているからです。


**** メモ
o グローバルな名前を減らす利点については「ブログの本文にJavaScriptを書く時の注意点」をどうぞ。
o 上の書き方は一例です。JavaScriptは表現の幅が広い言語ですから、自分の好みの書き方で実現します。


==
関連ページ:
    ▼Bloggerブログの本文を書く。ラベルと貼り付けとHTMLモード
    ▼Blogger
    ▼制作メモ
    > HTMLの編集やHTMLモードで入力する時に、変換が必要になる記号
    HTMLモード。特定ページのサイドバーが下にずれる時の確認点
    +
    ブログの本文にJavaScriptを書く時の注意点
(2010年9月26日変更。プロパティにする例について単純化と説明追加)

ブログの本文にJavaScriptを書く時の注意点 - Blogger

Bloggerブログの本文を書く。ラベルと貼り付けとHTMLモード
ブログの本文でJavaScriptを使う時、ホームページやWikiには無い注意点が1つあります。
それは、ブログには、記事本文を上下に並べて表示する機能がある事です。

複数のページで同じ名前のグローバル関数や変数やidを使っていると、記事を並べて表示した時に名前の衝突が起こります。
ですから、ブログの複数のページでJavaScriptを使う時は、名前の付け方などを工夫するなどして、問題が起こらないようにします。


**** 工夫の色々
o グローバルな名前を極力減らします。
   + グローバルな名前 = 他のページと並べて表示した時に、他のページから見える名前の事です。
   + このブログで使っている方法は、次の3つです。
      + ローカル変数を使う方法
      + 一時的に使う変数や関数を、名前の無い関数の中に閉じ込める方法
      + グローバル変数を1つだけ公開して、外から操作したい関数や変数をグローバル変数のプロパティにする方法
   + 詳しくは「JavaScriptで使うグローバルな名前を減らす方法
o ページ毎にキーワードを決めて、そのページで使う全てのグローバルな名前の先頭に、キーワードを付けます。
o 多くのページで使う便利な関数は、Bloggerのテンプレートに記述してしまうか、外部ファイルにして呼び出す方法が便利です。
   + 理由は、関数の内容を修正したくなった時に 1箇所だけ直せば済むからです。
   + 外部ファイルにする場合は、ブログの管理は少し面倒になります。
   + ブログ以外の場所にJavaScriptファイルを置きますので、Bloggerのバックアップ対象になりません。

o なお、同じ名前の関数が重複していても、問題ない場合もあります。
   + 内容が全く同じで、複数のページに置いても干渉しない作りになっている場合です。


==
関連ページ:
    ▼Bloggerブログの本文を書く。ラベルと貼り付けとHTMLモード
    ▼Blogger
    ▼制作メモ
    > JavaScriptで使うグローバルな名前を減らす方法
    HTMLの編集やHTMLモードで入力する時に、変換が必要になる記号
    HTMLモード。特定ページのサイドバーが下にずれる時の確認点
(2010年12月29日変更。JavaScriptは、Bloggerのテンプレートに記述する事も可能)

ブログの本文にJavaScriptを書く方法 - Blogger

Bloggerブログの本文を書く。ラベルと貼り付けとHTMLモード
Bloggerは、本文中にJavaScriptを埋め込む事も出来ます。

o 「HTML」モードに切り替えてから入力します。
o scriptタグの内容をコメントで囲みます。


**** 手順
** 「HTML」モードに切り替えます。
o 本文入力欄の左上にある「HTML」ボタンをクリックします。
    + 有効になると、「HTML」ボタンの背景色が少し暗くなります。
o 右側にある「投稿の設定」欄の「オプション」は、必要に応じて切り替えます。
    + to_dkで使っている設定は、「HTMLコードを表示」と「「Enter」キーを押して改行」

** scriptタグを書き、その中にHTMLコメントを入れます。
o Bloggerで文法エラーにならない、最低限の書き方
--------
<script type="text/javascript">
<!--
document.write("おはようございます。ミクさん");
//-->
</script>
--------

o コメント「<!--」「//-->」で囲まない場合、スクリプトの中で大なり記号や小なり記号を使った時に、Bloggerが文法エラーと判定します。

o XHTMLの仕様に極力合わせた書き方
--------
<script type="text/javascript">
//<![CDATA[
<!--
document.write("おはようございます。ミクさん");
//-->
//]]>
</script>
--------

o 将来的に、上の書き方よりも長持ちすると思われる書き方です。
    + と言っても、書く文字が多いですので、上の書き方の方が長生きするかもしれません。
o 追加したのは2行。「//<![CDATA[」と「//]]>」の行です。
o XHTMLの仕様では最初の //も余分です。でも、//が無いと実際に表示する時に問題が起こります。


**** メモ
o XHTML仕様に極力準拠する為には、もう一工夫必要になります。
o JavaScriptで「</」が出てくる所は、全部「<\/」に書き直す必要があります。
   + 「誰ですか、手間を増やす規則を作ったのは。」と言いたい所ですが、XHTMLの仕様を決めた人達は、書き易さよりもブラウザーの作り易さを優先したみたいです。

o この他、ブログ特有の注意点として、記事の一覧表示対応があります。
   + 複数のページに JavaScriptを書く時は、同じ名前を使っていると重なる事があります。
   + 必要に応じて、重ねない工夫をします


==
関連ページ:
    ▼Bloggerブログの本文を書く。ラベルと貼り付けとHTMLモード
    ▼Blogger
    ▼制作メモ
    > ブログの本文にJavaScriptを書く時の注意点
    JavaScriptで使うグローバルな名前を減らす方法
    HTMLの編集やHTMLモードで入力する時に、変換が必要になる記号
    +
    HTMLモード。特定ページのサイドバーが下にずれる時の確認点
(2012年5月7日変更。新デザイン対応)

AWKプログラムで使用可能な特殊ファイル名。標準入力、標準出力、標準エラー出力など - AWK

AWKの入出力とコマンド実行機能
getlineprintで標準入力や標準出力を使いたくなった時、特殊なファイル名を使用する事が出来ます。

o /dev/stdin -- 標準入力(= mawk不可)
o /dev/stdout -- 標準出力
o /dev/stderr -- 標準エラー出力

この他、Gawkでは、次の特殊ファイル名も使用できます。
o /dev/null -- 出力しない
o /dev/pid -- プロセスID(非推奨。Gawkでは変数 PROCINFO["pid"]の使用を推奨しています)

**** 使用例
--------
BEGIN {
  print "ミクさんの髪飾りは四角形" > "/dev/stderr";
}
--------


特別なファイル名の一覧
名前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」の使用を推奨
o この他に、「/inet/」から始まるインターネット接続用文字列があります。
    詳しくは「/inet = AWKからインターネットにアクセスする方法」(Gawk専用)


==
関連ページ:
    ▼AWKの入出力関数とコマンド実行機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > ▼AWKのインターネット接続機能(Gawk専用)
    /dev/stderr = 標準エラー出力を示すファイル名
    PROCINFO = AWKのプロセスに関する情報。プロセスIDなど(Gawk専用)

2010年9月24日金曜日

ツール。MikuTime = 誕生日からの経過日数と経過秒数を調べます - 初音ミク

ブラウザーを初音ミク
初音ミク
誕生日

確認日
  

Miku time
 
 

**** 誕生日の簡易切り替え(= クリックすると、上の誕生日欄を変更します。)
UNIX time 起点 1970年1月1日(UTC)
MEIKO 発売 2004年11月5日(JST)
KAITO 発売 2006年2月17日(JST)
初音ミク 発売 2007年8月31日(JST)
鏡音リン・レン 発売 2007年12月27日(JST)
巡音ルカ 発売 2009年1月30日(JST)
**
MikuMikuDance 発表 2008年2月24日9時33分(JST)推定
UTAU 発表 2008年3月6日15時18分(JST)推定
ねんどろいど初音ミク 発売 2008年3月31日(JST)
初音ミク Project-DIVA 発売 2009年7月2日(JST)推定
**
がくっぽいど 発売 2008年7月31日(JST)
Megpoid 発売 2009年6月26日(JST)
Lily 発売 2010年8月26日(JST)
ガチャッポイド 発売 2010年10月8日(JST)
**
氷山キヨテル 発売 2009年12月4日(JST)
 歌愛ユキ(同日)
 SF-A2 開発コード miki(同日)
猫村いろは 発売 2010年10月22日(JST)


o JavaScirptで作りました。確認に使ったブラウザーはFirefoxです。
o 間違った値を与えると、適当に計算します。入力内容を確認したい方は、逆に変換してみて下さい。

**** 計算方法
o 誕生日からの経過秒数です。閏秒は数えません。
o 閏秒を指定した時、次の分の0秒に置き換えます。
o 1970年から2099年まで計算出来ます。

o 初音ミクの誕生日(= 発売日) = 2007年8月31日
o 誕生39日 = 2007年10月9日
o 誕生393日 = 2008年9月27日
o 誕生3939日 = 2018年6月13日


==
関連ページ:
    ▼ブラウザーを初音ミク
    ▼初音ミク
    ▼制作メモ
    > ▼初音ミクの購入とインストール
    ▼初音ミク動画を作る
    ツール。文字列からアスキーコードを調べます(String to ASCII) - AWK
(2010年9月26日変更。DIVAとLilyの欄の計算が間違っていたので訂正)
(2010年9月24日変更。Internet Explorer 8で2100年を計算しようとする条件に対応)

2010年9月23日木曜日

ツール。文字列からアスキーコードを調べます(String to ASCII) - AWK

AWKの文字列操作機能

文字列 STRING

16進数HEX
10進数DEC
8進数OCT
2進数BIN

----
o JavaScriptで作りました。
o AWKで文字コードを扱う時の確認用に作りました。
   + printf関数やsprintf関数の書式文字列"%c"で整数値を指定する時
   + 文字列表現 "\x12", "\012"を使う時
o 漢字を変換した時に表示される文字コードは、きっと UTF-8です。
   + ブラウザーによって異なるかもしれません。


==
関連ページ:
    ▼AWKの文字列操作関数と関連機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > length = 文字列や配列の長さを調べる
    index = 文字列の登場位置を調べる
    match = 正規表現の登場位置を調べる
    +
    sprintf = 文字列を組み立てる
    ツール。systime関数とsrand関数の戻り値予想(Unix time)
    ツール。MikuTime = 誕生日からの経過日数と経過秒数を調べます

AWKでバイナリ出力する方法(mawk, Gawk専用) - AWK

AWKの入出力とコマンド実行機能
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ×awk
AWKでバイナリファイルを扱う方法について調べてみました。
その結果、mawkとGawkでは、バイナリコードを書き出す事が出来る事が分かりました。

o バイナリファイルを作る事が出来る処理系は
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6
   + mawk MBCS (32bit版) 1.3.3 -- 書式"%c"の1文字出力のみ対応
   + Mawk for Windows 1.3.3 -- 書式"%c"の1文字出力のみ対応

o バイナリファイルを作る事が出来ない処理系は
   + original = the one true awk(updated May 1, 2007)


**** 手順
o mawkとGawkの両方で使用出来る方法
   + 方法1。バイナリモードにして、printf("%c", 文字コード);
   + 方法2。バイナリモードにして、v = sprintf("%c", 文字コード); printf("%c", v);

o Gawkのみで使用出来る方法
   + 方法3。バイナリモードにして、"\x12"形式の文字列として書き、printf("%s", v);で一括出力
   + 方法4。バイナリモードにして、"\x12"形式の文字列として書き、print文で一括出力

o おまけ。使用出来なかった方法
   + バイナリコードに対する文字列の連結。v = v sprintf("%c", i);


** 方法1。バイナリモードにして、printf("%c", 文字コード);
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ×awk
o 実行コマンド(= gawk の部分は、各処理系に置き換えます。)
--------
gawk -v BINMODE=3 -f a.awk > out.bin
--------

o AWKプログラム
--------
BEGIN {
  for (i = 0; i < 256; ++i) {
    printf("%c", i);
  }
}
--------

o 実行コマンドの中で、変数 BINMODEに 2 もしくは 3 を指定するのがポイントです。
o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。


** 方法2。バイナリモードにして、v = sprintf("%c", 文字コード); printf("%c", v);
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ×awk
o 実行コマンド(= gawk の部分は、各処理系に置き換えます。)
--------
gawk -v BINMODE=3 -f a.awk > out.bin
--------

o AWKプログラム
--------
BEGIN {
  for (i = 0; i < 256; ++i) {
    v = sprintf("%c", i);
    printf("%c", v);
  }
}
--------



** 方法3。バイナリモードにして、"\x12"形式の文字列として書き、printf("%s", v);で一括出力
○Gawk on Windows ○Gawk ×mawk32 ×Mawk ×awk
o 実行コマンド(= gawk の部分は、各処理系に置き換えます。)
--------
gawk -v BINMODE=3 -f a.awk > out.bin
--------

o AWKプログラム
--------
BEGIN {
  v = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff";
  printf("%s", v);
}
--------

o \x12の書き方と文字を混在させる場合は、注意が必要です。
   + 16進数値と同じ文字が後ろに続くと、mawk以外では予想外の動きをしました。
o Gawk以外では、一部の文字コード出力に失敗します。
   + mawkは、0x00の出力に失敗します。
   + オリジナルは、変数 BINMODEをサポートしていません。
      + 0x00の出力失敗の他に、Windows版では常に 0x0A -> 0x0D0A変換を行います。


** 方法4。バイナリモードにして、"\x12"形式の文字列として書き、print文で一括出力
○Gawk on Windows ○Gawk ×mawk32 ×Mawk ×awk
o 実行コマンド(= gawk の部分は、各処理系に置き換えます。)
--------
gawk -v BINMODE=3 -f a.awk > out.bin
--------

o AWKプログラム
--------
BEGIN {
  ORS = ""; # print文の行区切り文字を無しに設定
  v = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff";
  print v;
}
--------

o \x12の書き方と文字を混在させる場合は、注意が必要です。
   + 16進数値と同じ文字が後ろに続くと、mawk以外では予想外の動きをしました。
o Gawk以外では、一部の文字コード出力に失敗します。
   + mawkは、0x00の出力に失敗します。
   + オリジナルは、変数 BINMODEをサポートしていません。
      + 0x00の出力失敗の他に、Windows版では常に 0x0A -> 0x0D0A変換を行います。


** 出力結果の確認方法
o バイナリエディターによる目視確認と、Windowsのファイル比較コマンド(fc /B ファイル1 ファイル2)を併用して行いました。
o 00からFFまで、綺麗に並んでいたら成功です。


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3 -- 書式"%c"の1文字出力のみ対応
o Mawk for Windows 1.3.3 -- 書式"%c"の1文字出力のみ対応
o original = the one true awk(updated May 1, 2007) -- 非対応


==
関連ページ:
    ▼AWKの入出力関数とコマンド実行機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > AWKでバイナリ入力する方法(Gawk専用)
    改行コード。Windows / UNIX / Mac の違いについて
    GawkでUTF-8のファイルを読み込む時の注意点
    +
    AWKプログラムの中で、8進数や16進数を使う方法
    BEGIN = 最初に実行する
    BINMODE = バイナリモードで読み書きする(mawk,Gawk専用)
    ORS = printを使って出力する時の改行文字
    sprintf = 文字列を組み立てる
(2010年9月27日変更。文字列に埋め込む例の説明で0x12から\x12に変更)
(2010年9月23日追加。出来なかった方法)

2010年9月21日火曜日

/dev/stderr = 標準エラー出力を示すファイル名 - AWK

AWKの入出力とコマンド実行機能
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
AWKでは、標準エラー出力をファイル名として指定する事が出来ます。

o 標準エラー出力の意味は「標準出力と標準エラー出力。AWKプログラムの出力結果をファイルに書き出す方法


**** 書式
--------
"/dev/stderr"
--------

o 文字列の形で指定します。


**** 使用例
--------
BEGIN {
  print "標準エラー出力に出力します。1行目はファイルがあれば上書き" > "/dev/stderr";
  print "標準エラー出力に出力します。2行目は追加書き" > "/dev/stderr";

  print "標準エラー出力に出力します。ファイルがあれば後ろに追加" >> "/dev/stderr";
  print "標準エラー出力に出力します。2行目は追加書き" >> "/dev/stderr";

  stderr = "/dev/stderr";
  print "変数にして指定する事も出来ます。ミクさん。" > stderr;
}
--------

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


**** 機能
o 標準エラー出力を示すファイル名です。


**** メモ
o Gawkの場合は、"/dev/fd/2" という書き方も可能です。
o Windows のコマンドプロンプト画面から標準エラー出力だけ取り出す方法は「標準出力と標準エラー出力。AWKプログラムの出力結果をファイルに書き出す方法


**** 確認した処理系
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
    ▼制作メモ
    > /dev/null = 常に空のファイル名
    AWKプログラムで使用可能な特殊ファイル名。標準入力、標準出力、標準エラー出力など
(2011年5月11日訂正。用語を標準エラー出力へ)

2010年9月20日月曜日

標準出力と標準エラー出力。AWKプログラムの出力結果をファイルに書き出す方法 - AWK

AWKプログラムを動かす
AWKプログラムの実行結果は、ファイルに書き出して確認する事も出来ます。
以下、Windows XPのコマンドプロンプト画面を使って試してみました。

o 書き方は、UNIXでもほぼ同じです。「2>&1」の所は違うかもしれません。


**** 原理
o コマンドプロンプト画面は、次の2つの出力を、1つの画面に表示しています。
   + 1番 = 標準出力 = 実行結果を表示する時に使います。普段使用しているのは、こちらです。
   + 2番 = 標準エラー出力 = エラーメッセージやデバッグ情報など、実行結果以外の情報を表示したい時に使います。
   ファイルに書き出す時は、ファイルに書き出したい番号と、書き出し先のファイルを指定します。
   番号を省略した時は、1番になります。
o 書き出し方法は2通りあります。
   + 上書き = ファイルがあれば、上書きします。ファイルが無ければ、作ります。
   + 追加 = ファイルがあれば、ファイルの最後に追加します。ファイルが無ければ、作ります。


**** 手順(Windowsの場合)
次の方法があります。
o 標準出力のみをファイルに書き出す
o 標準エラー出力のみをファイルに書き出す
o 標準出力と標準エラー出力の両方を書き出す
   + 標準出力と標準エラー出力の両方を、1つのファイルに書き出す
   + 標準出力と標準エラー出力を、別々のファイルに書き出す

** 標準出力のみをファイルに書き出す例
o 手操作の時に便利です。エラーメッセージは画面に表示されます。
--------
gawk -f a.awk in.txt > out.txt
gawk -f a.awk in.txt >> out.txt
--------

o 上の例は、ファイルがあれば上書き(= ファイルの内容を削除してから書き出します)。
o 下の例は、ファイルがあれば、後ろに追加。
o 「1> ファイル名」と書く事も出来ます。

** 標準エラー出力のみをファイルに書き出す例
--------
gawk -f a.awk in.txt 2> out.txt
gawk -f a.awk in.txt 2>> out.txt
--------

o 上の例は、ファイルがあれば上書き(= ファイルの内容を削除してから書き出します。)。
o 下の例は、ファイルがあれば、後ろに追加。

** 標準出力と標準エラー出力の両方を書き出す例
o エラーメッセージも全部記録したい時に使います。
o 標準出力と標準エラー出力の両方を 1つのファイルに書き出す例
--------
gawk -f a.awk in.txt > out.txt 2>&1
gawk -f a.awk in.txt >> out.txt 2>&1
--------

o 上の例は、ファイルがあれば上書き(= ファイルの内容を削除してから書き出します)。
o 下の例は、ファイルがあれば、後ろに追加。
o 「2>&1」を後ろに並べるのがポイントです。

o 標準出力と標準エラー出力を別々のファイルに書き出す例
--------
gawk -f a.awk in.txt > out.txt 2> error.txt
gawk -f a.awk in.txt >> out.txt 2> error.txt
gawk -f a.awk in.txt > out.txt 2>> error.txt
gawk -f a.awk in.txt >> out.txt 2>> error.txt
--------

o 4通りあります。


==
関連ページ:
    ▼AWKプログラムを動かす
    ▼AWK
    ▼制作メモ
    > 沢山の入力ファイルを簡単に処理する
    AWKのバージョンを確認する
    Gawkで、オプション一覧を表示する
    ▼AWKの入出力関数とコマンド実行機能
(2011年5月11日訂正。用語を標準エラー出力へ)

2010年9月17日金曜日

ウェブマスターツールの「サイトのパフォーマンス」画面 = ブログ読み込み時間の統計情報を見る方法 - Blogger

ウェブマスターツール
ブログの表示速度を改善しようと考えた時、表示速度の目安が欲しくなります。
そのような時は、Googleのウェブマスターツールの、「サイトのパフォーマンス」機能が便利です。


**** ウェブマスターツールの「サイトのパフォーマンス」画面で出来る事
o ページ読み込み時間の統計情報を見る(= 数か月分)
   + ページ読み込み時間の統計は、アクセス数が少ないと、精度が低いみたいです。
   + でも、ページ表示を高速化する時の、ある程度の目安になります。
o 自分のブログよりも遅いサイトの割合を見る
o 読み込み時間が早いサイト(上位20%)となる為の目標値を見る
   + 2010年9月現在、1.5秒程度でした。

o サイトを登録してから確認出来るようになるまで、何日か時間がかかります。
o でも、無料で、説明文が日本語、パソコンへのインストール不要という利点がありますので、他のツールよりは馴染み易いと思います。


**** 手順(2012年6月版)
o ウェブマスターツールにログインします。
   + Bloggerなどにログインしている場合は、自動認証されます。
   + 詳しくは、「ウェブマスターツールにログインする方法
o 確認したいサイトをクリックします。
   + サイトが見つからない時は、「サイトを追加」ボタンで追加します。
   + サイトを追加後、何日か経つと、統計情報を確認出来るようになります。
o 「ダッシュボード」画面に切り替わりますので、左のメニューから「Labs」-「サイトのパフォーマンス」


**** メモ
o HTML最適化に関する助言が欲しい時は、この画面の下の方で推奨している「Page Speed」プラグインを使う方法などがあります。
   + このプラグインは、2種類のブラウザーに対応しています。(Firefox と Google Chrome)
      + Firefox版「Page Speed」プラグインの実行には、「Firebug」プラグインも必要です。
   + 「サイトのパフォーマンス」ページの下の方から、ダウンロード出来ます。
   + 「Page Speed」プラグインの画面表示は、全部英語です。
      + 解析結果の一部が日本語化されています。

** その他
o このブログでは、ページ読み込み時間の上位50%以内に入る事を目標にしています。
o でも、トップページの居眠りミクさん(500KB)を外す予定はありません。


==
関連ページ:
    ▼ウェブマスターツール
    ▼Bloggerブログの分析とWebサービス連携
    ▼Blogger
    ▼制作メモ
    > ウェブマスターツールの「クロールエラー」画面 = 公開に失敗したページを確認する方法
    ウェブマスターツールの「検索クエリ」画面その1 = サイト訪問時に使ったWeb検索キーワードを確認する方法
    ウェブマスターツールの「検索クエリ」画面その2 = Google検索経由で表示された人気ページを確認する方法
(2012年6月2日変更。タイトル見直し。HTML最適化助言機能の削除対応)
(2012年6月1日変更。ログイン手順の変更対応)

2010年9月15日水曜日

AWKプログラムの中で、8進数や16進数を使う方法 - AWK

AWKの数値計算関数と関連機能
8進数や 16進数が大好きな方向けの情報です。

o 最低限の機能しかありませんので、不足している機能は自作します。
  + 実数を16進数表現する機能はありません。
  + 文字から文字コード(= 数値)に変換する機能もありません。


**** 手順
o 整数の値を16進数や8進数で書く方法(Gawk専用)
o 整数を16進数や8進数で表示する方法
o 16進数文字列を数値に変換する方法(Gawk専用)
o 文字列を文字コードで書く方法(= 注意事項あり)
o 文字1つを文字コードで書く方法(= 注意事項あり)


** 整数の値を16進数や8進数で書く方法(Gawk専用)
--------
v = 393; # 10進数表現

# Gawkの拡張機能
v = 0x189; # 393の 16進数表記
v = 0611; # 393の 8進数表記
--------



** 整数を16進数や8進数で表示する方法
--------
printf("%x\n", 393); # 16進数で表示
printf("%o\n", 393); # 8進数で表示
--------

o AからFを大文字にしたい時は、"%X"
o 16進数の場合、0x や 0Xを付けたい時は、"%#x" や "%#X"
o 8進数の場合、0 を付けたい時は "%#o"
o 文字にしたいだけの時は、printfの代わりに sprintfを使います。


** 16進数文字列を数値に変換する方法(Gawk専用)
o strtonum 関数を使います。
--------
v = "393" + 0; # 強制的に数値にしたい時、0と足し算します。

# Gawkの拡張機能
v = strtonum("0x189"); # 16進数表記を数値に変換
v = strtonum("0661"); # 8進数表記を数値に変換
--------

o 16進数表記の「0x」は、「0X」と書く事も出来ます。


** 文字列を文字コードで書く方法(= 注意事項あり)
o 16進数の場合「\x12」、8進数の場合「\123」の形で書きます。
o 2文字や3文字に満たない時は、数字の左を0で埋めます。
--------
v = "MikuSan";
v = "\x4d\x69\x6b\x75\x53\x61\x6e"; # 16進数表記
v = "\115\151\153\165\123\141\156"; # 8進数表記

v = "\t"; # タブ文字の場合
v = "\x09" # 16進数表記では、前ゼロを付けます。
v = "\011"; # 8進数表記でも、前ゼロを付けます。
--------

o この方法については、処理系によって制約がありますので、個別対応します。
o Gawkの場合(Gawk on Windows 3.1.7 / Gawk for Windows 3.1.6)
   + これらの処理系では、16進表記させた後に16進数となる文字が続くと、予想と異なる結果になります。
   + (例。"\x23a" は「#a」を期待して書くのですが、mawk以外では「:」コロン = 0x3a になりました。)
   + ですので、問題が起こる時は、16進数表記だけを変換して、変換結果を文字列として並べます。
o mawkの場合(mawk MBCS (32bit版) 1.3.3 / Mawk for Windows 1.3.3)
   + これらの処理系では、文字コードの 0 (= \x00)を入れると、強制終了もしくは異常終了します。
   + \x00 は、通常、目に見える文字ではありませんが、一部の文字コード(UTF-16)では、目に見える文字(= 2バイト以上あります)の一部として使用されています。
o original = the one true awk(updated May 1, 2007)の場合
   + Gawk と mawk の両方の問題を抱えています。


** 文字1つを文字コードで書く方法(= 注意事項あり)
--------
# 変数に入れる方法
v = sprintf("%c%c%c%c%c%c%c", 77,105,107,117, 83, 97,110); # 結果は MikuSan
v = sprintf("%c%c%c%c%c%c%c", 0x4d, 0x69, 0x6b, 0x75, 0x53, 0x61, 0x6e); # Gawk限定。結果は MikuSan

# 直接書き出す方法
printf("%c%c%c%c%c%c%c", 77,105,107,117, 83, 97,110); # 結果は MikuSan
--------

o 画面やファイルに書き出す時、改行コード 0x0aは、0x0d0a に自動変換されます。
   + mawkやGawkでは、変数 BINMODEを使って、この自動変換を無くす事が出来ます。
o 文字コード の 0(0x00)を文字列中に含める事が出来るのは、Gawkのみです。
   + mawkとオリジナルは、このコードを文字列変数の中に入れる事は出来ません。


==
関連ページ:
    ▼AWKの数値計算関数と関連機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > int = 実数や文字列を整数化する
    strtonum = 10進数、8進数、16進数の文字列を数値に変換する(Gawk専用)
    sqrt = 平方根を求める
    +
    AWKでバイナリ出力する方法(mawk, Gawk専用)
(2010年9月23日追加。文字1つを文字コードで書く方法)
(2010年9月16日追加。文字列を文字コードで書く時の、mawkの制限)

rshift = 整数を右にビットシフトする(Gawk専用) - AWK

AWKの数値計算関数と関連機能
○Gawk on Windows ○Gawk ×mawk32 ×Mawk ×awk
符号なし整数値であると解釈して、右にビットシフトします。(論理シフトに相当します。)
o 対応しているのは整数のみです。実数や文字列を直接演算する機能はありません。

**** 書式
--------
rshift( シフトしたい値, シフトするビット数 )
--------

o シフトしたい値 -- 整数を指定します。
   + 負の値を指定した場合、符号なし整数値であると解釈します。値は0よりも大きくなります。
o シフトするビット数 -- 正の整数を指定します。
   + 負の値を指定した場合、左シフトではなく、右に最後までシフトした所から逆算します。
o 戻り値 -- 演算結果です。符号なし整数の形になります。


**** 使用例
--------
BEGIN {
  print rshift(393, 1); # 結果は 196
  print rshift(3, 1); # 結果は 1
  print rshift(3, 2); # 結果は 0
  print rshift(0, 1); # 結果は 0
  print rshift(-1, 1); # 結果は 2147483647
  print rshift(-1, 2); # 結果は 1073741823
}
--------

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


**** 機能
o 符号なし整数値であると解釈して、右にビットシフトします。(論理シフトに相当します。)
o ビットシフトして出来た左側の空きには、0が入ります。
o 負の値も指定出来ますが、結果は符号なし整数の形になります。
o 実数を指定すると、小数点以下を数学的に切り捨てます。
o 数値の後ろに文字列が続いていても、大丈夫です。
o 先頭に数値以外の文字がある場合
   + 半角空白は読み飛ばします。
   + それ以外の文字があると、0 とみなして演算します。
o この機能をサポートしていない処理系があります。

** 処理系に依存する動作
o 4294967295(= 32ビット =10桁程度)まで指定出来る処理系(= 32ビット整数)
   + Gawk on Windows 3.1.7
   + この処理系の場合、正しくシフト出来るのは 31ビットまでです。

o 4503599627370496(= 53ビット =16桁程度)まで指定出来る処理系(= おそらくdouble型に依存)
   + Gawk for Windows 3.1.6
   + この処理系の場合、正しくシフト出来るのは 52ビットまでです。


**** 確認した処理系
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
    ▼制作メモ
    > OFMT = 数値から文字列への自動変換に使う書式その1。数値1つだけの時
    CONVFMT = 数値から文字列への自動変換に使う書式その2。数値と文字列を結合する時
    ?: = 条件演算子
    +
    and = AND演算する。整数をビット毎に論理積(Gawk専用)
    or = OR演算する。整数をビット毎に論理和(Gawk専用)
    xor = XOR演算する。整数をビット毎に排他的論理和(Gawk専用)
    compl = NOT演算する。整数の1の補数(Gawk専用)
    lshift = 整数を左にビットシフトする(Gawk専用)
    strtonum = 10進数、8進数、16進数の文字列を数値に変換する(Gawk専用)

lshift = 整数を左にビットシフトする(Gawk専用) - AWK

AWKの数値計算関数と関連機能
○Gawk on Windows ○(注記あり)Gawk ×mawk32 ×Mawk ×awk
符号なし整数値であると解釈して、左にビットシフトします。(論理シフトに相当します。)
o 対応しているのは整数のみです。実数や文字列を直接演算する機能はありません。

**** 書式
--------
lshift( シフトしたい値, シフトするビット数 )
--------

o シフトしたい値 -- 整数を指定します。
   + 負の値を指定した場合、符号なし整数値であると解釈します。値は0よりも大きくなります。
o シフトするビット数 -- 正の整数を指定します。
   + 負の値を指定した場合、右シフトではなく、左に最後までシフトした所から逆算します。
o 戻り値 -- 演算結果です。符号なし整数の形になります。


**** 使用例
--------
BEGIN {
  print lshift(393, 1); # 結果は 786
  print lshift(1, 1); # 結果は 2
  print lshift(1, 2); # 結果は 4
  print lshift(0, 1); # 結果は 0
  print lshift(-1, 1); # 結果は 4294967294 もしくは 8589934590
  print lshift(-1, 2); # 結果は 4294967292 もしくは 17179869180
}
--------

o 結果は左から、Gawk on Windows 3.1.7、Gawk for Windows 3.1.6
o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。


**** 機能
o 符号なし整数値であると解釈して、左にビットシフトします。(論理シフトに相当します。)
o ビットシフトして出来た右側の空きには、0が入ります。
o シフト結果が 4294967295 を超える時、処理系によって返す値が異なります。
o 負の値も指定出来ますが、結果は符号なし整数の形になります。
o 実数を指定すると、小数点以下を数学的に切り捨てます。
o 数値の後ろに文字列が続いていても、大丈夫です。
o 先頭に数値以外の文字がある場合
   + 半角空白は読み飛ばします。
   + それ以外の文字があると、0 とみなして演算します。
o この機能をサポートしていない処理系があります。

** 処理系に依存する動作
o 扱う事の出来る値の範囲は、処理系によって異なります。
o 4294967295(= 32ビット =10桁程度)まで計算出来る処理系(= 32ビット整数)
   + Gawk on Windows 3.1.7
   + この処理系の場合、正しくシフト出来るのは 31ビットまでです。

o 4503599627370496(= 53ビット =16桁程度)まで計算出来る処理系(= おそらくdouble型に依存)
   + Gawk for Windows 3.1.6
   + この処理系の場合、正しくシフト出来るのは 52ビットまでです。
   + 32ビット整数と同等の動きをさせたい時は、シフトした結果の上位桁を切り捨てます。
   + 例えば、and(rshift(v, n), 0xffffffff)


**** 確認した処理系
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
    ▼制作メモ
    > rshift = 整数を右にビットシフトする(Gawk専用)
    OFMT = 数値から文字列への自動変換に使う書式その1。数値1つだけの時
    CONVFMT = 数値から文字列への自動変換に使う書式その2。数値と文字列を結合する時
    +
    and = AND演算する。整数をビット毎に論理積(Gawk専用)
    or = OR演算する。整数をビット毎に論理和(Gawk専用)
    xor = XOR演算する。整数をビット毎に排他的論理和(Gawk専用)
    compl = NOT演算する。整数の1の補数(Gawk専用)
    strtonum = 10進数、8進数、16進数の文字列を数値に変換する(Gawk専用)

compl = NOT演算する。整数の1の補数(Gawk専用) - AWK

AWKの数値計算関数と関連機能
○Gawk on Windows △(注記あり)Gawk ×mawk32 ×Mawk ×awk
符号なし整数値であると解釈して、NOT演算します = ビット毎に否定します = 1の補数を取ります。

o NOT演算は、1の時は0、0の時は1にする演算です。ビット毎に判定します。
o 対応しているのは整数のみです。実数や文字列を直接演算する機能はありません。
o 処理系によって返す値が異なりますので、注意が必要です。

**** 書式
--------
compl( 演算したい値 )
--------

o 演算したい値 -- 整数を指定します。
o 戻り値 -- 演算結果です。符号なし整数の形になります。


**** 使用例
--------
BEGIN {
  print compl(393); # 結果は 4294966902 もしくは 9007199254740598
  print compl(0); # 結果は 4294967295 もしくは 9007199254740991
  print compl(-1); # 結果は 0 もしくは 9007194959773696
}
--------

o 結果は左から、Gawk on Windows 3.1.7、Gawk for Windows 3.1.6
o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。


**** 機能
o 符号なし整数値であると解釈して、NOT演算します = ビット毎に否定します = 1の補数を求めます。
o 負の値も指定出来ますが、結果は符号なし整数の形になります。
o 実数を指定すると、小数点以下を数学的に切り捨てます。
o 数値の後ろに文字列が続いていても、大丈夫です。
o 先頭に数値以外の文字がある場合
   + 半角空白は読み飛ばします。
   + それ以外の文字があると、0 とみなして演算します。
o この機能をサポートしていない処理系があります。

** 処理系に依存する動作
o 補数の取り方は、処理系によって異なります。
o 32ビット整数として補数を求める処理系
   + Gawk on Windows 3.1.7
   + 4294967295まで計算出来ます。

o おそらくdouble型の補数を求める処理系
   + Gawk for Windows 3.1.6
   + 16桁程度まで計算出来ます。でも、浮動小数点形式の補数ですので、使い所が難しそうです。


**** 確認した処理系
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
    ▼制作メモ
    > lshift = 整数を左にビットシフトする(Gawk専用)
    rshift = 整数を右にビットシフトする(Gawk専用)
    OFMT = 数値から文字列への自動変換に使う書式その1。数値1つだけの時
    +
    and = AND演算する。整数をビット毎に論理積(Gawk専用)
    or = OR演算する。整数をビット毎に論理和(Gawk専用)
    xor = XOR演算する。整数をビット毎に排他的論理和(Gawk専用)
    strtonum = 10進数、8進数、16進数の文字列を数値に変換する(Gawk専用)