コミュニティ/BBS

トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BBS

BBS ご利用の際の注意

  • ここには AWK に関するさまざまな話題を記載してください。
  • 件数が増えてきたら古いものから順に過去ログに移動します。過去ログは [BBS] から参照できます。
  • 投稿する前に
    • 過去ログに同様の内容がないかを確認してください。
    • ここに記載された内容に関しては、gawk を利用する際に用いたり、書籍への掲載、他の Web への掲載、他の ML への投稿の際の引用を行うことがあります。ご理解の上、ご利用ください。
    • AWK とは無関係と思われる投稿、コメントに関しては削除させていただきますのでご了承ください。

最近のタイトル一覧

[ 1 2 3 4 5 6 ]

BBS

お名前
件名
本文

Awk Tutorial - さいとう (2006年04月23日 20時59分29秒)

以下のような "Awk Tutorial" というページがあるそうです。

動作しないのですが、Web 上で動作確認できるようなことも可能のようです。

nawk が使われているということは、Solaris のようですが、awk の自習には適しているかもしれません。


{{comment multi|w}}

awk in Wikipedia - さいとう (2006年04月20日 22時42分05秒)

以下の awk の記事は xgawk のリーダーでもある Jurgen Kahrs が加筆したそうです。

A future of awk. - hi_saito (2006年03月31日 01時52分51秒)

以下のようなものが comp.lang.awk に投げられています。

  1. awk07 って何?
  2. awk95 の次?
  3. それって awk のスタンダード?
  4. gawk との関係は?
  5. xgawk はどうするねん

gawk に限ったものではなく、「Programing Language AWK」としての最小限の機能として、再定義するなら分かる (comp.lang.awk でも gawk なのか awk なのか nawk なのかで何度ももめている) んだけど、それがどういう位置づけになるのか気になります。しかも結構ドラスティックに変わるような記述も見られますから、注目しておくべきでしょう。

でも、そもそも awk95 って AT&T のコマーシャル的な色の強い awk じゃなかったでしたっけ?三賢者も AT&T から離れたから新しいのを作ろうと思っているのでしょうか?

背景が思いっきり気になります。


Re: - hi_saito (2006年04月05日 00時46分54秒)

どうも興味本位で聞いてみただけっぽいです。

xgawk の Juergen Kahrs も

The POSIX standard currently has no "future directions" for
the AWK utility. Maybe you send them some suggestions.
Most of the changes which were suggested are real changes
in syntax and semantics of the language, and therefore far
from trivial to implement.

If you are interested in minor additions to the language,
you can implement experimental extensions for the GNU Awk
interpreter. GNU Awk has an interface for "Dynamic Extensions"
since version 3.1:

http://www.gnu.org/software/gawk/manual/html_node/Dynamic-Extensions....

And finally, we have the xgawk distribution, which has
implemented extensions for XML, PostgreSQL, and MPFR:

   http://sourceforge.net/projects/xmlgawk/

The beta release of xgawk should have appeared last Sunday,
but it hasnt. The SourceForge CVS server was not available
since last week. But expect to see an announcement here
very soon after the SourceForge CVS server is up again.

と書いており、要するに、

*提案はしかるべき場所に!
*やりたいことあるなら xgawk に加勢しろ

という切り返しをしてますね。{{comment multi|w}}

AWK: The Linux Administrators' Wisdom Kit - hi_saito (2006年03月12日 00時19分23秒)

簡単な例でいろいろな一行野郎が示されています。

一行野郎の入門としてどうぞ。

「The Linux Administrators' Wisdom Kit」というタイトルがいいですね。


An Introduction to awk - hi_saito (2006年03月10日 01時56分12秒)

Jos Nazario による簡単な awk の英語でチュートリアルが書かれています。

でも、awk でちょうど良い中級クラスの書籍ってないですね。「プログラミング言語 awk」くらいでしょうか。初級のものは非常に多いのですが、そこから進むための手ごろなドキュメントも欲しいですね。


{{comment}}

複数ファイルのオープン - hi_saito (2006年02月15日 21時43分09秒)

ある人から何度も受けている質問で、

awk はファイルを同時にオープンできるか?

というものがあります。

できますよ。

と答えたものの、普通のアクションでは同時オープンになりません。つまり、ARGV[1] から ARGV[ARGID] まで逐次オープンして逐次クローズしていることになります。(内部ソースは置いておいて、そうなっているように見える)

(同時に) オープンをする場合、getline にてオープンさせることができますが、これは同時に複数のファイルをオープンしていると言えるのでしょうか?私は「言える」と思っています。

例として、適切なものではないけれど、以下のようなものを用意しました。

test1.txt は以下のとおり。

これは test1.txt です。(1 行目)
これは text1.txt です。(2 行目)

test2.txt は以下のとおり。

これは test2.txt です。(1 行目)
これは text2.txt です。(2 行目)

試した open.awk は以下のとおり。

BEGIN {
  while ( getline < ARGV[1] > 0 ) {
        print;
        while ( getline < ARGV[2] > 0 ) {
          print;
        }
        close( ARGV[2] );
  }
  close( ARGV[1] );
}

結果は、

$ gawk -f open.awk test1.txt test2.txt
これは test1.txt です。(1 行目)
これは test2.txt です。(1 行目)
これは text2.txt です。(2 行目)
これは text1.txt です。(2 行目)
これは test2.txt です。(1 行目)
これは text2.txt です。(2 行目)

どうなんでしょう。


{{comment}}

#ifdef/#endif の処理 - hi_saito (2006年02月15日 00時20分41秒)

awk でわざわざ #ifdef/#endif を処理することもなかろうと思っていたのですが、何となく仕事で多用しそうなので、書いてみたがダメダメ。

これはテストです。
#ifdef aaa
これは ifdef aaa 内です。
#endif
これはテストです。
#ifdef bbb
これは ifdef bbb 内です。
#endif
これはテストです。

という test.txt に対して、どうやるかという基本的な部分が私には欠落しているらしい。

BEGIN {
  define_key = "aaa";
  split( define_key, define_arr, ":" );
}
{
  if ( $1 ~ /#ifdef/ ) {
        define_flag = 1;
          for ( define_arr_idx in define_arr ) {
          if ( $2 == define_arr[define_arr_idx] ) {
            define_match = 1;
            getline;
          }
        }
  } else if ( $1 ~ /#endif/ ) {
        define_flag = define_match = 0;
        getline;
  }
  if ( define_flag == 1 && define_match == 1 ) {
        print;
  } else if ( define_flag == 1 && define_match == 0 ) {
        getline;
  } else if ( define_flag == 0 && define_match == 0 ) {
        print;
  }
}

という ifdef.awk を作ってみる。

define_key に ":" で区切ってキーワードを入れれば、OR を取って #ifdef 〜 #endif を処理してくれます。ただし、この #ifdef/#endif の行は出力されません。

もっとスマートな方法があったら教えてください。


{{comment}}

コメント行をスキップする方法 - hi_saito (2006年02月12日 02時49分49秒)

コメント行をスキップする方法

みなさんは、コメント行をスキップする場合にどうやっていますか?

/^#/ {
  next;
}

これだと行頭だけの # ですよね。

/#/ {
  next;
}

これだと printf() や sprintf() にまで埋め込まれたものにマッチしてしまいますよね。

意外に考えると難しい。

無難なところで、

/^[ \t]*#/ {
  next;
}

でしょうか?


{{comment}}

ファイルの挿入 - hi_saito (2006年02月11日 00時20分41秒)

以下のようなファイル file1.txt と file2.txt があります。

^----- file1.txt
This is the file1.txt.
#INCLUDE file2.txt
$----- file1.txt
^----- file2.txt
This is the file2.txt.
$----- file2.txt

この "#INCLUDE file2.txt" の部分に file2.txt を挿入したいと考えています。

つまり、結果として

This is the file1.txt.
This is the file2.txt.

を得るにはどうするのがいいのでしょうか?

{
  if ( $0 ~ /^#INCLUDE/ ) {
    input_file = $2;
    while ( getline < input_file > 0 ) {
      print;
    }
    close( input_file );
  } else {
    print;
  }
}

こんな感じで書く以外にありますか?また、awk でなくても構いません。


  • mixi にも同じ内容のものでトピ立ててしまった。 - hi_saito (2006年02月11日 00時21分12秒)
  • 例えばこれが多段になってネストしているような場合はどうすればいいのでしょう? (そこまで必要としていませんが…) - hi_saito (2006年02月11日 00時37分52秒)

あ、そか、function にしてやればいいのか。

  • こんにちは,シェルスクリプトで書いてみました. - takano32 (2006年02月12日 17時47分04秒)
#!/bin/sh
while read LINE
  do
  FILE="${LINE#'#INCLUDE'}"
  if [ "$FILE" != "$LINE" ] ; then
    cat $FILE
  else
    echo $LINE
  fi
done

この場合,ネストを処理するには"cat $FILE"のところを"./expand.sh < $FILE"(expand.shはこのシェルスクリプトの名前とします)とすればいけます.

  • どうもありがとうございます。参考になります。 - hi_saito (2006年02月12日 21時29分54秒)

{{comment}}

2ch ネタですが、分かりやすいのでリンクだけ - hi_saito (2006年02月06日 00時48分08秒)

awk がどんなものかが分かりやすいです。


{{comment}}

QTAwk について - hi_saito (2006年02月05日 01時57分22秒)

QTAwk という awk があるそうです。機能は gawk 以上のようです。

ただ、awk との互換性が乏しいかな。

組み込み関数は gawk の function で作れてしまえそうなものが多いので、頭の体操になるかもしれませんね。

pi, pi() とか。

function pi() {
  return 2*atan(1,0);
}
pi = 2*atan(1,0);

使われている方っていますか?

http://www.quiktrim.org/


{{comment}}

SJIS Hankaku Katakana problem - hi_saito (2006年01月29日 23時37分00秒)

I'm sorry. This page is writen in only English.
Because I have to report to xmlgawk developers team.
This page is writen for Linux.

Create SJIS environment (Debian GNU/Linux)

First you have to edit /etc/locale.gen as root.

# vi /etc/locale.gen

You add the line "ja_JP.SJIS SJIS" in /etc/locale.gen and do "locale-gen".

# locale-gen

Then you can make SJIS (Shift JIS) environment in your Linux.

Create SJIS environment (Fedora Core)

First you create SJIS locale file.

# localedef -i ja_JP -c -f SHIFT_JIS /usr/lib/locale/ja_JP.sjis

You have to edit /etc/sysconfig/i18n and set LANG to "ja_JP.SJIS".

# vi /etc/sysconfig/i18n

And reboot the system.

Test the shell script of SJIS

Here is a test shell script.

If you have a Japanese fonts, you are very lucky.
But I will show my screens by capturing my screen.

In SJIS terminal (Japanese WindowsXP), you will see like below.

I prepare 2 gawks.One is unpatched original gawk and other is patched gawk.The Koichi's patch is below.

Japanese Hankaku-Katakana (half-width kana) is a very strange code.They are placed over 0x100 in UTF-16 (or UTF-32) but they are 1 byte code in SJIS.

In Japanese MS-Windows and Mac OS X, SJIS is a default charactor code, so SJIS is very famous in Japan.

Run the script

If your terminal can use SJIS code, the result of this script is like below.

The original gawk can't handle Japanese regular expressions but patched gawk can handle Japanese regular expressions.


  • 最後のスクリーンショットでオがでていませんが? - きむら (2006年02月03日 14時18分03秒)
  • む、出ていませんね。何ででしょう。家で Fedora で試してみます。 - hi_saito (2006年02月03日 17時43分44秒)
  • TeraTerm? の問題っぽいです。SJIS に切り替えて、"アイウエオ" を半角で入れて確定すると "オ" が消えますね。 - hi_saito (2006年02月03日 18時24分47秒)
  • SJIS の端末…と思っていたら、手元の cmd.exe からの telnet を忘れていました。(w - hi_saito (2006年02月04日 00時00分52秒)
  • 画面を差し替えました。あと s/Emacs/SJIS terminal/。 - hi_saito (2006年02月04日 00時17分53秒)
  • ちなみに、ゆりえ様パッチ (?) とどちらを使うのが良いのでしょうか? - hi_saito (2006年02月04日 00時18分57秒)
  • ゆりえ様パッチは別か。 - hi_saito (2006年02月04日 00時33分31秒)
  • あー、すでにわかっているようですが、別のファイルに対するパッチですんで、両方とも必要です。reg*の方はDFAを使わないなら発現しないかも。 - きむら (2006年02月04日 01時03分22秒)
  • 了解です。問題はこれをどうやって報告するかですね。どうしよう。上の本文だけで出しても大丈夫ですかね。 - hi_saito (2006年02月04日 03時22分33秒)
  • とりあえず、MLに投げる前にArnoldにはglibcのバグデータベースに登録した県もf組めて報告します。その上でgnu-utils MLにも投げろという話になればそうしますんで、本線のgawkでの対処を見てからでもよいのでは? >ゆりえ様パッチ。あと、前の発現のDFAを使わないのなら、は、DFAを使うのならの間違いです。環境変数を設定する以外に再現条件があるか探してみます。 - きむら (2006年02月04日 05時21分31秒)
  • げ、変換ミスが。現象は同じでも別件のバグなんで、これはこれで報告してしまってよいのではないでしょうか? あと、SJISロカール追加の手順がFedoraCore?では違ったような… - きむら (2006年02月04日 05時24分38秒)
  • GAWK_NO_DFAを設定しない場合での再現手順が見つかりました。
D:\home\prog\gawk-3.1.5>echo abcアdef|gawk -v RS="[ア]" "1"
abc
def
D:\home\prog\gawk-3.1.5>echo abcアdef|gawk -v RS="[ア-オ]" "1"
abcアdef

まあかなりのレアケースと見てよいのではないかと。 - きむら (2006年02月04日 15時33分25秒)

  • Fedora Core の場合も書き加えてみました。これでいいんでしたっけ? SJIS 環境なんて Linux で作ったことないですから… - hi_saito (2006年02月04日 19時15分17秒)
  • とりあえず、Fedora Core でも再現しました。SJIS 環境は上記手順で OK です。 - hi_saito (2006年02月04日 19時32分09秒)
  • 強引に URL 貼って投げてみました。反応を見てみましょうかね。 - hi_saito (2006年02月04日 19時41分52秒)

{{comment}}

gawk とマルチバイト文字と正規表現 - hi_saito (2006年01月28日 21時12分35秒)

個人の Blog からの移行 (誘導) です。

gawkとマルチバイト文字と正規表現に以下のようなことが書かれていました。

たとえばen_us.UTF-8 なんてのはa A b B c C d D ...のような順序に
なり、[a-z]にはZを除く大文字も含まれることになる (ときどきメー
リングリストにバグ報告として流れてますな)。で、日本語版Windows
で調べたところ、日本語ロカールでは a a A A b b B B c c C 
C d d D D... のように順序付けられていることが判明。

Debian GNU/Linux sarge で試す

abcdefg
ABCDEFG
abcdefg
ABCDEFG

というファイルを、UTF-8 (test-utf8.txt), EUC-JP (test-euc.txt), SJIS (test-sjis.txt) で用意。

これを

$ LANG=ja_JP.eucJP gawk '/[a-z]/' test-euc.txt
abcdefg
$ LANG=ja_JP.UTF-8 gawk '/[a-z]/' test-utf8.txt
abcdefg
$ LANG=ja_JP.SJIS gawk '/[a-z]/' test-sjis.txt
abcdefg

としたが、結果は上のようになりません。

LC_ALL を設定しても同じ結果でした。

alnum でも調べました

ja_JP.eucJP で

$ gawk '/[[:alnum:]]/' test-euc.txt
abcdefg
ABCDEFG
abcdefg
ABCDEFG

とすると、日本語 (2 byte) まで入ってきます。

$ gawk '/[A-Za-z0-9]/' test-euc.txt
abcdefg
ABCDEFG

で、man page には、

For example, before the POSIX standard, to match alphanumeric 
characters,  you  would have  had to write /[A-Za-z0-9]/.

と書かれていますが、POSIX では LANG=C の時と同じらしいので、

LC_ALL=C gawk '/[[:alnum:]]/' test-utf8.txt
abcdefg
ABCDEFG

となります。

Fedora Core 5 Test 2 で試す

ついでなので、FC5T2 でも試してみた。環境は Fedora Core なので、ja_JP.UTF-8 です。

で、結果は上と全く同じでした。

ここまでが、1/27 の Blog に書いた内容です。


en_US.UTF-8 で試す

試したのは Debian GNU/Linux sarge です。

上の内容で、「en_us.UTF-8」とありますが、このロケールを作成しようとするとエラーになります。「en_us.UTF-8」ではなく「en_US.UTF-8」ですね。

root で /etc/locale.gen に以下を追加します。

en_US.UTF-8 UTF-8

そして、

# locale-gen

と実行します。これで en_US.UTF-8 のロケールが加えられます。

LC_ALL=en_US.UTF-8 gawk '/[a-z]/' test-utf8.txt
abcdefg
ABCDEFG

確かに、gawkとマルチバイト文字と正規表現の書き込みのとおりです。

つまり、

LC_ALL=en_US.UTF-8 gawk '/[A-Z]/' test-utf8.txt
abcdefg
ABCDEFG

となるわけです。

ただし、

日本語版Windowsで調べたところ、日本語ロカールでは
 a a A A b b B B c c C C d d D D... のように
 順序付けられていることが判明。

これが再現しませんね。日本語環境では、大丈夫という結果になっています。

ついで

同じ現象が grep についても ML に書かれていたので、確認してみました。

$ LC_ALL=en_US.UTF-8 grep [a-z] test-utf8.txt
abcdefg
ABCDEFG
$ grep [a-z] test-utf8.txt
abcdefg

そういうことのようです。

$ grep [[:alnum:]] test.txt
abcdefg
ABCDEFG
abcdefg
ABCDEFG

ということです。


  • 要するに LANG をちゃんと設定しないとダメだよということでしょうか? en_US.UTF-8 な人たちは大丈夫なんですかね。 - hi_saito (2006年01月28日 21時13分42秒)
  • LANGというか細かく言うとLC_CTYPEですね。en_USだけでなくて、DEとかIEとかでも同様の報告が出ているようです。影響大きいと思うんだけど思ったよりはレポートの数が少ないかもしれない。USの人はCロカール使えばいいだろうけど、マルチバイト環境の人間にはつらいですよね。どこかいい落としどころがないものでしょうか? - きむら (2006年01月28日 23時33分05秒)
  • レポートを投げてもメインが英語圏なので、反応が少ないですよね。やっぱり、日本発の OSS は LANG=C (デフォルト) だと日本語を表示するようにしてしまって、強引にでも en_US を使わせるとか…。 - hi_saito (2006年01月29日 00時12分48秒)
  • まあロカールが設定されていなかったりCロカールだったら警告メッセージ出すくらいが穏当ですかね。起動できないようにするのはちょっと過激か。 - きむら (2006年01月29日 14時35分31秒)

{{comment}}

gawk 3.1.5 で文字列のバイト数を得る - hi_saito (2006年01月20日 00時10分06秒)

mixi で書き込んだネタですが、

gawk 3.1.5 では length("あああ") は 3 を返しますが、
純粋にバイト数 (EUC-JP の場合なら 6) を返すような
関数ってありますか?

jgawk 時代には length() と jlength() を使った
スクリプトを作っていました。

また、index() などでも同様の区別をさせることって
可能でしょうか?

というのを書き込みましたが、gawk 3.1.5 では無理そうです。

http://mixi.jp/view_bbs.pl?id=4003327&comm_id=1615


{{comment}}

sed & awk プログラミング - hi_saito (2006年01月04日 01時17分56秒)

ピンクの初版は持っているのですが、最近、gawk のメンテナーである Arnold Robbins も執筆に加わっていますね。

以下のサイトに、良いように書かれているのですが、初版から変わったところがあれば教えてください。(読みやすくなったとか、最新に追従できているとか)

リンク/関連書籍にも書きましたが、初版ではイマイチ分かりにくい書籍だった印象があります。

{{comment}}

xmlgawk が gawk 3.1.5 に追従中 - hi_saito (2005年12月28日 01時44分24秒)

ちょうど今、cvs に xmlgawkgawk 3.1.5 対応版がアップされようとしています。(明日には cvs からダウンロードできると思います。)

まだ、ソースコードは見ていませんが、gawk 3.1.5 の累積パッチ対応版であれば、日本人にとって便利な xmlgawk の誕生になりそうです。


  • 既に cvs 版は gawk 3.1.5 に加えて、known bug に対するパッチが当てられたものを入手することが可能になっています。 - hi_saito (2006年01月16日 00時41分15秒)

cvs からのインストール方法などの詳細については、xmlgawk のインストールガイドを参照してください。

  • こんなのも xgawk に組み込まれるそうです。 - hi_saito (2006年01月20日 00時33分51秒)

一気に計算処理が強い言語 (?) になりそうですね。

  • mpfr を試してみましたが、実行速度も問題ないレベルで、スタティックに組み込めば楽に使えます。 - hi_saito (2006年01月21日 03時25分35秒)
  • ビルドしてサンプル (未公開) を試してみました。 - hi_saito (2006年01月22日 00時14分10秒)

ビルドは以下のとおり。

$ ./update-autotools && ./configure --enable-static-extensions \
  --enable-xml --enable-mpfr --enable-switch && make && make check

試したサンプルは以下のとおり。

BEGIN {
#  extension("/usr/local/lib/awk/3.1.5/mpfr.so", "dlload")

  MPFR_PRECISION = 200

  # http://www.mpfr.org/sample.html
  fak = 1
  sum = 1
  for (i = 1; i <= 100; i++) {
        fak = mpfr_mul(fak, i)
        sum = mpfr_add(sum, mpfr_div(1, fak))
  }
  print sum
  print sum - exp(1)
  print sum - mpfr_exp(1)
  print mpfr_const_pi()
}

結果は以下のとおり。実行時は "-l" を付けます。

$ gawk -l mpfr -f ~/tmp/test2.awk
2.718281828459045235360287471352662497757247093699959574966970
0
0
3.141592653589793238462643383279502884197169399375105820974944

これはスタティックリンク版の gawk を生成したからで、もしもダイナミックリンク版の gawk を生成する場合は以下のようにします。

ただし、上のスタティックリンク版とダイナミックリンク版を連続して試す際には、必ず以下を実行してください。エラーになります。

$ make clean

で、ビルドします。

$ ./update-autotools && ./configure --enable-dynamic-extensions \
  --enable-xml --enable-mpfr --enable-switch && make && make check

サンプルは上のコメントを外します。

BEGIN {
  extension("/usr/local/lib/awk/3.1.5/mpfr.so", "dlload")

  MPFR_PRECISION = 200

  # http://www.mpfr.org/sample.html
  fak = 1
  sum = 1
  for (i = 1; i <= 100; i++) {
        fak = mpfr_mul(fak, i)
        sum = mpfr_add(sum, mpfr_div(1, fak))
  }
  print sum
  print sum - exp(1)
  print sum - mpfr_exp(1)
  print mpfr_const_pi()
}

実行時は "-l" を付けません。

$ gawk -f ~/tmp/test2.awk
2.718281828459045235360287471352662497757247093699959574966970
0
0
3.141592653589793238462643383279502884197169399375105820974944

また、Debian GNU/Linux を使う場合には、以下をインストールします。

# apt-get install libmpfr-dev
  • Windows でもコンパイルできたようです。 - hi_saito (2006年01月28日 00時29分33秒)

凄いです。

cvs 版の ChangeLog? を見てもらえれば分かると思いますが、他の MPFR がらみの組み込み関数も増えています。

  • MPFR がらみの関数が増えた関係で、MPFR 2.2.0 でないとダメと言われてしまいました。なので、Debian GNU/Linux では stable リポジトリからは入手することができません。unstable のリポジトリにあるので、こちらを利用するか自分でビルドしてください。 - hi_saito (2006年01月29日 03時51分16秒)

おまけに、現時点の configure スクリプトでは MPFR の場所 (libmpfr の場所) が決め打ちっぽいので、十分に注意してインストールしてください。

  • げ、MPFR2.2.0必須ですか。VC++8.0買うまで追随できんなあ。 - きむら (2006年01月29日 14時33分57秒)
  • libmpfr の場所の指定が configure で可能になりました。 - hi_saito (2006年02月06日 23時08分34秒)
./configure --with-mpfr=PATH

で指定します。

また、mpfr を使った "make check" も可能になりました。

かなりいい加減に私がビルドしていたのが原因で、gmp → mpfr → xgawk の順でビルドして mpfr のビルドの際に gmp の場所を教えておかないと、xgawk のビルドでエラーになることが今頃判明。

  • で、mpfr のテストがフェルマー数ですか…。 - hi_saito (2006年02月07日 00時18分52秒)

数学は全然分かりませんので、これが何と聞かれても困りますので、分かる人は簡単な説明を続けてくださると助かります。

つまり、

$ gawk -l mpfr -f xmpfrmat.awk 65537
1.0000000000000000 6.5537000000000000E4
$ gawk -l mpfr -f xmpfrmat.awk 4294967297
6.4100000000000000E2 6.7004170000000000E6

というわけで前者は素因数で後者は因数分解可能ということらしいです。

なので、引数はフェルマー数を入れてください (つまり奇数) ということらしい。

で、

# Fermat F1 = 2 ^ (2 ^ 0) + 1 = 3                    = prime
# Fermat F1 = 2 ^ (2 ^ 1) + 1 = 5                    = prime
# Fermat F2 = 2 ^ (2 ^ 2) + 1 = 17                   = prime
# Fermat F3 = 2 ^ (2 ^ 3) + 1 = 257                  = prime
# Fermat F4 = 2 ^ (2 ^ 4) + 1 = 65537                = prime
# Fermat F5 = 2 ^ (2 ^ 5) + 1 = 4294967297           = 641 * 6700417
# Fermat F6 = 2 ^ (2 ^ 6) + 1 = 18446744073709551617 = 274177 * 67280421310721
# Fermat F7 = 2 ^ (2 ^ 7) + 1 = 340282366920938463463374607431768211457
#        F7 =                   59649589127497217 * 5704689200685129054721

となるそうです。(弱){{comment}}

OSC2006 (春) に awk で出るべきか? - hi_saito (2005年12月24日 00時23分03秒)

ここの ML に以下のような文面でメールを送付しました。

この ML を管理しています斉藤と言います。

よろしくお願いします。

この ML は、

>gawk を真面目に楽しく使うユーザー会です。
>gawk から広がるコミュニティの輪を体感していただけると嬉しいです。
>そのためには、
>・Lightweight Language のイベントへの参加
>・gawk または xmlgawk の開発やテストに参加
>のように積極的に OSS 開発参加していきます。
>そうした内容を話し合う ML です。

と書いたようにイベントにも積極的に参加しようと考えています。

私は Fedora JP として OSC (オープンソースカンファレンス) には毎回参加してい
ますが、awk で参加したいというご意見がありましたら、参加を検討してみたいと
思っています。

awk 単独で長々と話すのは難しいので、ライトニングトークあたりでの紹介になる
かと思いますが、http://gauc.no-ip.org/ で配布している自家製 gawk を CD-R で
配布するのも面白いかもしれません。

次回の OSC は 2006 年 3 月 18 日 (17 日は企業向けと思われます) の予定で、ま
だまだ準備には十分な時間があります。

ご意見がありましたら、お待ちしています。

OSC は日本 Ruby の会も使っており、LL で何かを発表するには良い機会です。メールにもあるように最初はライトニングトークで「JGAUC をよろしく」というレベルでも良いのではないかと思いますが、いかがでしょうか?

目的としては、

  1. JGAUC というコミュニティができたよ
  2. gawk 3.1.5 は結構バギーだから気を付けよう
  3. xgawk の新しい時間関数ってどうよ

を伝えることで、これができれば十分だと思います。

ご意見は ML でもいいですし、ここに書き込んでもかまいません。


{{comment}}

gawk 3.1.5 20051223 版 - hi_saito (2005年12月23日 02時07分31秒)

gawk 3.1.5 はマルチバイトの文字列関数が使えるため、日本人には非常に有用なバージョンであるものの、一部では「gawk 3.1.6 のスケジュールは?」と言われているようにバグが多いのが実情です。

そこで、私の方で確認できているパッチ当てたものを用意してみましたので、"Own Risk" でお使いください。したがって、問題があっても私は責任を負いません。

動作テストは Debian GNU/Linux (Sarge) にて確認していますが、動作保障するものではありません。

以下適用したパッチ

以下のパッチを適用しています。

20051223 版での追加適用

ただし、この一連のスレッドに関する議論はまだ行われている最中に Aharon Robbins のパッチのみを適用しています。

20051218 版での追加適用

20051202 版での追加適用

20051008 版での適用

ビルド方法

ビルド方法は、ドキュメント/インストールガイドに従うものとしますが、以下のようにしてビルドを行っています。

$ ./configure --enable-switch CFLAGS="-g -O3 -march=i686"
$ make
$ make check
$ su
# make install

また、"make check" は問題なく "ALL TESTS PASSED" であることは確認しています。

おまけ

各パッチの適用の際に、pot ファイルのインデックスが乱れたため、再度以下のようにして po ファイルを更新させています。

$ cd po
$ make gawk.pot-update
$ make update-po
$ make update-gmo

一応、全て翻訳完了の状態にしてありますので、そのままお使いください。


{{comment}}

Emacs のリージョンを awk にかける方法 - hi_saito (2005年12月23日 00時53分15秒)

Emacs にはリージョン指定の範囲をコマンドに渡して処理をさせる機能があります。(もちろん、vi にもありますが、ここでは割愛します)

ミニバッファに結果を入れる場合

Emacs で C-@ または C-Space で指定開始して、処理を行いたい範囲を指定したら、M-| を押します。

すると、

Shell command on region:

とミニバッファに現れますので、コマンドを入力します。この際の標準入力はリージョン指定範囲が echo などで渡されたのと同じになります。

直接コマンド結果で置き換える場合

Emacs で C-@ または C-Space で指定開始して、処理を行いたい範囲を指定したら、C-u M-| を押します。

すると、

Shell command on region:

とミニバッファに現れますので、コマンドを入力します。この際の標準入力はリージョン指定範囲が echo などで渡されたのと同じになります。

awk に限らず、sed, perl, ruby の一行野郎を使った方が楽な場合が多くありますので、使ってみてください。このミニバッファへ入力したコマンドはヒストリーも有効になっています。

特にコメントにする (# を行頭に付けるなど) 場合に役に立ちます。

gawk '{printf("#%s\n",$0)}'

とか、

gawk '{printf("/*%s*/\n",$0)}'

という具合に使います。

もちろん、逆に、

gawk '{sub(/^#/,"");print}'

とか、

gawk '{sub(/^\/\*/,"");sub(/\*\/$/,"");print}'

で元に戻すことも可能です。

上では、gawk を使いましたが、sed や perl が楽ですね。(w

{{comment}}

gawk 3.1.5 20051218 版 - hi_saito (2005年12月17日 23時25分09秒)

gawk 3.1.5 はマルチバイトの文字列関数が使えるため、日本人には非常に有用なバージョンであるものの、一部では「gawk 3.1.6 のスケジュールは?」と言われているようにバグが多いのが実情です。

そこで、私の方で確認できているパッチ当てたものを用意してみましたので、"Own Risk" でお使いください。したがって、問題があっても私は責任を負いません。

動作テストは Debian GNU/Linux (Sarge) にて確認していますが、動作保障するものではありません。

以下適用したパッチ

以下のパッチを適用しています。

20051218 版での追加適用

20051202 版での追加適用

20051008 版での適用

ビルド方法

ビルド方法は、ドキュメント/インストールガイドに従うものとしますが、以下のようにしてビルドを行っています。

$ ./configure --enable-switch CFLAGS="-g -O3 -march=i686"
$ make
$ make check
$ su
# make install

また、"make check" は問題なく "ALL TESTS PASSED" であることは確認しています。

おまけ

各パッチの適用の際に、pot ファイルのインデックスが乱れたため、再度以下のようにして po ファイルを更新させています。

$ cd po
$ make gawk.pot-update
$ make update-po
$ make update-gmo

一応、全て翻訳完了の状態にしてありますので、そのままお使いください。


{{comment}}

[ 1 2 3 ]


最終更新時間:2007年07月30日 22時13分08秒