腐っても鯛? 騏も老いては駑馬に劣る?
三人の碩学が生み出したスクリプト言語AWKについて語るスレ
◆ 前スレ
awkについて語るスレ
http://pc10.2ch.net/test/read.cgi/tech/1023556171/
◆ 関係スレ
シェルスクリプト相談室
http://pc10.2ch.net/test/read.cgi/tech/1112553783/
AWKでCGI
http://pc10.2ch.net/test/read.cgi/php/1171804314/
【sed】シェルスクリプト総合@LINUX Part2【awk】
http://pc10.2ch.net/test/read.cgi/linux/1154578200/
◆ 参考
The AWK Programming Language (Brian Kernighan):
ttp://cm.bell-labs.com/cm/cs/awkbook/index.html
GAWK (GNU Projedt):
ttp://www.gnu.org/software/gawk/
探検
awkについて語るスレ $2
■ このスレッドは過去ログ倉庫に格納されています
2007/02/23(金) 23:55:42
581デフォルトの名無しさん
2011/05/06(金) 23:07:48.20 awkでは数値はすべてdoubleで扱います。
ですからその精度である53bit分、大体15桁ちょっとを超えると正確な値を保持できません。
23桁あたりまで正しく表示できてるってのはよくわかりませんが、
3.0.6にしても出力時の書式指定が違うだけで内部的には同じように不正確な値に
なってしまってると思います。
ですからその精度である53bit分、大体15桁ちょっとを超えると正確な値を保持できません。
23桁あたりまで正しく表示できてるってのはよくわかりませんが、
3.0.6にしても出力時の書式指定が違うだけで内部的には同じように不正確な値に
なってしまってると思います。
582デフォルトの名無しさん
2011/05/07(土) 01:38:55.53 だから、実質long doubleの精度になっているんだってば。
583デフォルトの名無しさん
2011/05/07(土) 11:11:15.94 >>582
「実質」というのはどういう意味?
#define AWKNUM double
ってのがあるし、long double にしても仮数部は64bitだから23桁には足りないよ?
x87のレベルで拡張精度になってても、表示やらなんやらするところで倍精度に
丸められちゃうと思うんだけど。
「実質」というのはどういう意味?
#define AWKNUM double
ってのがあるし、long double にしても仮数部は64bitだから23桁には足りないよ?
x87のレベルで拡張精度になってても、表示やらなんやらするところで倍精度に
丸められちゃうと思うんだけど。
584デフォルトの名無しさん
2011/05/07(土) 13:09:06.68 http://codepad.org/4GaxJcGp
完全に一致。どう見ても double です。本当にありがとうございました
完全に一致。どう見ても double です。本当にありがとうございました
585デフォルトの名無しさん
2011/05/07(土) 21:19:09.46586デフォルトの名無しさん
2011/05/07(土) 23:01:38.63 >>583
あー、long doubleと言ったのが拙かったね。10の冪の場合は実質doubleを大きく越えた精度になっていると言いたかった。
10は2と5の積だから、10倍を繰り返すときに仮数部は5倍ずつにしかならない。
IEEEのdoubleの精度だと5の22乗で53ビットを使い果たすので、そこまでは誤差が生じない。
言い換えれば、10の場合は53ビット+22ビット、即ち75ビット分精度があるように見える。
まぁ、>584を10倍じゃなくて5倍にして、doubleをlong longにして%.fを%llxにしてビット数を数えてみればわかるでしょ。
あー、long doubleと言ったのが拙かったね。10の冪の場合は実質doubleを大きく越えた精度になっていると言いたかった。
10は2と5の積だから、10倍を繰り返すときに仮数部は5倍ずつにしかならない。
IEEEのdoubleの精度だと5の22乗で53ビットを使い果たすので、そこまでは誤差が生じない。
言い換えれば、10の場合は53ビット+22ビット、即ち75ビット分精度があるように見える。
まぁ、>584を10倍じゃなくて5倍にして、doubleをlong longにして%.fを%llxにしてビット数を数えてみればわかるでしょ。
587デフォルトの名無しさん
2011/05/09(月) 21:13:05.37 gawkのユーザガイドに、他の処理系では、標準エラーを使うため、
print "Serious error detected!" | "cat 1>&2"
という方法しかないとあります。
gawkは/dev/stderrを特別に扱うため、
print "Serious error detected!" > "/dev/stderr"
と書くのが適切とあります。
これには、どのような違いがあるのでしょうか?
/dev/stderrがあるOSなら、catのプロセスが生成される他は、違いはないのでしょうか?
環境や処理系を問わず動作させたいなら、上の書き方の方がよいのか、気になっています。
よろしくお願いします。
print "Serious error detected!" | "cat 1>&2"
という方法しかないとあります。
gawkは/dev/stderrを特別に扱うため、
print "Serious error detected!" > "/dev/stderr"
と書くのが適切とあります。
これには、どのような違いがあるのでしょうか?
/dev/stderrがあるOSなら、catのプロセスが生成される他は、違いはないのでしょうか?
環境や処理系を問わず動作させたいなら、上の書き方の方がよいのか、気になっています。
よろしくお願いします。
588デフォルトの名無しさん
2011/05/10(火) 00:17:11.81 他の処理系って、他のawkって事だよ。
/dev/stderrがあるOSって事ぢゃなくて、
gawkは特殊なファイル名として/dev/stderrとか使えるよ、って事だよ。
なので他のOSでも gawk だったらprintとかの出力先ファイル名として /dev/stderr 使えるって話だね。
/dev/stderrとかをサポートしていないgawk以外のawkでも動作させるなら パイプと"cat 1>&2"を使う方法しかない。が、Win系はcatだと...
/dev/stderrがあるOSって事ぢゃなくて、
gawkは特殊なファイル名として/dev/stderrとか使えるよ、って事だよ。
なので他のOSでも gawk だったらprintとかの出力先ファイル名として /dev/stderr 使えるって話だね。
/dev/stderrとかをサポートしていないgawk以外のawkでも動作させるなら パイプと"cat 1>&2"を使う方法しかない。が、Win系はcatだと...
589デフォルトの名無しさん
2011/05/10(火) 09:20:21.36 そこまでのことをするならPerl/Ruby/Python等のちゃんとした
スクリプト言語で書いた方がいいんじゃないかな。こういう
どうでもいいところで悩まなくて済むよ。
awkはawkで手軽に書ける範囲なら他の追随を許さないと思うが
その枠をはみ出ようとすると途端に大変になる。そこが楽しいと
いうのなら無理には止めないけどw
スクリプト言語で書いた方がいいんじゃないかな。こういう
どうでもいいところで悩まなくて済むよ。
awkはawkで手軽に書ける範囲なら他の追随を許さないと思うが
その枠をはみ出ようとすると途端に大変になる。そこが楽しいと
いうのなら無理には止めないけどw
590デフォルトの名無しさん
2011/05/10(火) 14:35:51.09 >>589
そう、それが楽しいんだ
そう、それが楽しいんだ
591デフォルトの名無しさん
2011/05/11(水) 00:36:20.77592デフォルトの名無しさん
2011/05/11(水) 10:19:43.16 Cで書き直したら数秒で実行完了の予感w
593デフォルトの名無しさん
2011/05/11(水) 12:14:45.46 つーてもawkとかその他のスクリプトでサクッと書けるような文字列処理を
C言語とかではあんまり書きたくならんと思うぞw
C言語とかではあんまり書きたくならんと思うぞw
594デフォルトの名無しさん
2011/05/24(火) 10:19:27.54 なりません
595デフォルトの名無しさん
2011/05/25(水) 20:17:22.02 あぁああぁぁぁ〜〜〜無理だったか、、無理なのかー!a[0][0] = 1 → syntax error
596デフォルトの名無しさん
2011/05/25(水) 21:58:46.38 >>595
gawkの場合インデックスをSUBSEP(=\034がデフォルト)を挟んでシリアライズしたインデックスで多次元配列を表現する
a[0,0] = 1;
ならOKのはず。このときのインデックスは"0\0340"だから、a["0\0340"] == 1。
gawkの場合インデックスをSUBSEP(=\034がデフォルト)を挟んでシリアライズしたインデックスで多次元配列を表現する
a[0,0] = 1;
ならOKのはず。このときのインデックスは"0\0340"だから、a["0\0340"] == 1。
597デフォルトの名無しさん
2011/05/26(木) 18:46:04.99 >>596
ありがとう。始めからそれを意識して書いてたらよかったんだけどね。
god["name"] = "Kaname Madoka"
god["msg"] = "Mahoushoujo ha watashi dakede juubun dayo."
homerun["name"] = "Akemi Homura"
homerun["msg"] = "Madoka ha watashi no yome."
こんな風に書いていたのを、
puella_magi["god"] = god
puella_magi["homerun"] = homerun
みたいにまとめようとしたら、あばばばば
awkの配列って処理系によっては添え字が整数の場合、処理が最適化されて早くなったりするのかな?
構造体の代わりみたいに使いたかったのだが。
ありがとう。始めからそれを意識して書いてたらよかったんだけどね。
god["name"] = "Kaname Madoka"
god["msg"] = "Mahoushoujo ha watashi dakede juubun dayo."
homerun["name"] = "Akemi Homura"
homerun["msg"] = "Madoka ha watashi no yome."
こんな風に書いていたのを、
puella_magi["god"] = god
puella_magi["homerun"] = homerun
みたいにまとめようとしたら、あばばばば
awkの配列って処理系によっては添え字が整数の場合、処理が最適化されて早くなったりするのかな?
構造体の代わりみたいに使いたかったのだが。
598デフォルトの名無しさん
2011/05/27(金) 00:57:28.69 name["god"] = "Kaname Madoka"
msg["god"] = "Mahoushoujo ha watashi dakede juubun dayo."
name["homerun"] = "Akemi Homura"
msg["homerun"] = "Madoka ha watashi no yome."
でよくね?
msg["god"] = "Mahoushoujo ha watashi dakede juubun dayo."
name["homerun"] = "Akemi Homura"
msg["homerun"] = "Madoka ha watashi no yome."
でよくね?
599デフォルトの名無しさん
2011/05/30(月) 21:25:51.88 awkって *どの実装でも* 一度も使ったことがない変数の内容って、スカラなら0か""になってるの?
変数が一度も代入されていないことを判定するために、(x==0 && x=="")って書いて何か問題ない?
変数が一度も代入されていないことを判定するために、(x==0 && x=="")って書いて何か問題ない?
600デフォルトの名無しさん
2011/05/30(月) 21:31:52.21601デフォルトの名無しさん
2011/05/30(月) 21:32:47.76 >>599
何度も代入した後、最後に 0 or "" を代入した変数と区別できない。
何度も代入した後、最後に 0 or "" を代入した変数と区別できない。
602デフォルトの名無しさん
2011/05/30(月) 23:19:06.92603デフォルトの名無しさん
2011/05/31(火) 00:05:27.97 あれ?試したらどっちを代入しても599の式は0に評価されたよ。区別できないケースってどういう場合?
604デフォルトの名無しさん
2011/05/31(火) 06:28:27.99 BEGIN {
# 初期化直後 (未使用) の変数は数値 (0) と文字列 ("") の両方の型を持つ。
print x == 0, x == ""; # 両方とも真
x = 0;
print x == 0, x == ""; # 前者のみ真。
x = "";
print x == 0, x == ""; # 後者のみ真。
# 他の未使用の変数を代入すると "再初期化" できる。
x = y;
print x == 0, x == ""; # 両方とも真。
}
# 初期化直後 (未使用) の変数は数値 (0) と文字列 ("") の両方の型を持つ。
print x == 0, x == ""; # 両方とも真
x = 0;
print x == 0, x == ""; # 前者のみ真。
x = "";
print x == 0, x == ""; # 後者のみ真。
# 他の未使用の変数を代入すると "再初期化" できる。
x = y;
print x == 0, x == ""; # 両方とも真。
}
605デフォルトの名無しさん
2011/05/31(火) 22:57:53.71 > 初期化直後 (未使用) の変数は数値 (0) と文字列 ("") の両方の型を持つ。
IEEE Std 1003.1 の awk の EXTENDED DESCRIPTION の
Variables and Special Variables に書いてあるね。 uninitialized value というらしい。
POSIXに準拠してるawkならこうなるみたいだけど、オリジナルは知らん。
再初期化するなら$(NF+1)使うほうがいいかもね。未使用の変数を用意しなくていい。
だけど、それが必要な場面が思い浮かばないが。
関係ないけど、abs関数ってないんだね。別に良いけど、πや、
0より大きい最小の浮動小数点数は定義しててほしいなあ。
IEEE Std 1003.1 の awk の EXTENDED DESCRIPTION の
Variables and Special Variables に書いてあるね。 uninitialized value というらしい。
POSIXに準拠してるawkならこうなるみたいだけど、オリジナルは知らん。
再初期化するなら$(NF+1)使うほうがいいかもね。未使用の変数を用意しなくていい。
だけど、それが必要な場面が思い浮かばないが。
関係ないけど、abs関数ってないんだね。別に良いけど、πや、
0より大きい最小の浮動小数点数は定義しててほしいなあ。
606デフォルトの名無しさん
2011/06/02(木) 10:09:14.37607デフォルトの名無しさん
2011/06/02(木) 22:47:31.10 πはatan2(0,-1)でいいとして
「0より大きい最小の浮動小数点数」ってどう定義していつ使うの?
「0より大きい最小の浮動小数点数」ってどう定義していつ使うの?
608デフォルトの名無しさん
2011/06/03(金) 13:48:37.95 「0より大きい最小の浮動小数点数」というのが何を希望しているかによる。
以下の3種類がある。
(1) 最小の正の非正規数
(2) 最小の正の正規数
(3) 1.0に足して丸めた結果が1.0より大きくなる最小の数
以下の3種類がある。
(1) 最小の正の非正規数
(2) 最小の正の正規数
(3) 1.0に足して丸めた結果が1.0より大きくなる最小の数
609デフォルトの名無しさん
2011/06/03(金) 23:58:11.26610デフォルトの名無しさん
2011/06/04(土) 09:41:48.63 DBL_EPSILONが>>608の(1)〜(3)のどれかわからない?
数値計算の基本なんだが。
数値計算の基本なんだが。
611デフォルトの名無しさん
2011/06/10(金) 21:49:33.34 変数名など、自前であっても規則を意識している方いますか?
awkだと、C風が一般的なのでしょうか?
一番最初がVBAだったので、長い名前と省略が混ざってしまって
自分でイライラしています。
みなさんの、通常の変数はこう、配列はこう、定数はこう、文字型はこう・・・
というものを参考にしたいです。
awkだと、C風が一般的なのでしょうか?
一番最初がVBAだったので、長い名前と省略が混ざってしまって
自分でイライラしています。
みなさんの、通常の変数はこう、配列はこう、定数はこう、文字型はこう・・・
というものを参考にしたいです。
612デフォルトの名無しさん
2011/06/10(金) 22:10:28.97 >>611
システムハンガリアンを採用するかどうか悩むほど大きなものをawkで書いたことが無い
システムハンガリアンを採用するかどうか悩むほど大きなものをawkで書いたことが無い
613かあた
2011/06/13(月) 18:37:34.88 、5なわやあふぉt( ())
614デフォルトの名無しさん
2011/06/15(水) 21:51:26.93 >>611
遅レスだが、型_内容の説明_名前みたくしてる。名前が一文字だとそのままだけど。
グローバル変数とローカル変数のどっち弄ってるのか分かりやすいように、ローカル変数は必ずlで始めるようにしてる。
d_per_shouhizei = 5.0とかね。
遅レスだが、型_内容の説明_名前みたくしてる。名前が一文字だとそのままだけど。
グローバル変数とローカル変数のどっち弄ってるのか分かりやすいように、ローカル変数は必ずlで始めるようにしてる。
d_per_shouhizei = 5.0とかね。
615デフォルトの名無しさん
2011/06/20(月) 18:37:26.17 gawkでBINMODEを設定すればバイナリーの入出力ができるのはわかるのですが、
入力されたバイナリーを16進ダンプして表示するにはどうしたらよいでしょうか?
od等の外部コマンドを使う意外に方法があればお教えください。
入力されたバイナリーを16進ダンプして表示するにはどうしたらよいでしょうか?
od等の外部コマンドを使う意外に方法があればお教えください。
616デフォルトの名無しさん
2011/06/20(月) 19:17:07.50 printf("%02x\n", $1);
617天使 ◆uL5esZLBSE
2011/07/05(火) 00:15:13.83 二度と話かけんなよ
お前らってどうみてもゴミだよな
お前らってどうみてもゴミだよな
618デフォルトの名無しさん
2011/07/06(水) 14:04:55.24 ゴミんなさい
619デフォルトの名無しさん
2011/07/14(木) 23:55:15.84 >>595
gawk4.0.0でa[0][0]=1も可能になったじゃないか
gawk4.0.0でa[0][0]=1も可能になったじゃないか
620デフォルトの名無しさん
2011/07/30(土) 19:46:15.81 超初心者の質問で申し訳ありません。以下のようなデータを
aaa 10
bbb 20
ccc 30
aaa 30
bbb 30
aaa 15
ccc 30
ddd 20
以下のようにまとめたいのですが、どうしたらいいでしょうか?
aaa 55
bbb 50
ccc 60
ddd 25
aaa 10
bbb 20
ccc 30
aaa 30
bbb 30
aaa 15
ccc 30
ddd 20
以下のようにまとめたいのですが、どうしたらいいでしょうか?
aaa 55
bbb 50
ccc 60
ddd 25
621デフォルトの名無しさん
2011/07/30(土) 19:53:38.97 ddd 20 ではないかと思うがこんな感じかな
awk '{a[$1]+=$2} END {for (b in a) {print b " " a[b]}}' | sort
awk '{a[$1]+=$2} END {for (b in a) {print b " " a[b]}}' | sort
622デフォルトの名無しさん
2011/07/30(土) 23:15:27.52 Gawk4ならPROCINFO["sorted_in"]の設定で最後のsortが要らなくなる
623620
2011/07/30(土) 23:22:20.03 >621
ありがとうございます!うまくいきました。
ありがとうございます!うまくいきました。
624デフォルトの名無しさん
2011/07/31(日) 15:24:48.76 gawkはもう別言語なイメージ。普段mawk使ってると
625デフォルトの名無しさん
2011/08/16(火) 22:48:21.64 ここって生きてますか?
626デフォルトの名無しさん
2011/08/18(木) 01:56:26.63 生きてますん
627デフォルトの名無しさん
2011/08/19(金) 00:53:44.39 生きていることを願って質問を。
WIN32のEXE一つで、下のTEST.AWKがマトモに動くAWKを探しています。
これら以外にありますか?
http://hinadori.atnifty.com/~wills/program/gawkm115.zip
http://my.vector.co.jp/servlet/System.FileDownload/download/http/0/376460/pack/win95/util/text/awk/gawk-mbcs-win32-20051223.zip?ds
http://my.vector.co.jp/servlet/System.FileDownload/download/http/0/80308/pack/win95/util/text/awk/mw32r27.lzh?ds
Cygwin版も試したのですがダメでした。
TEST.AWK
{ gsub("[0-9]","x",$0) ; gsub("ソ","ソ",$0) ; gsub("T","T",$0) ; print }
TEST.DAT
アイウエオカキクケコサシスセソ
ココココサフサコココココ
ココココサフサココココ
ココココサフサコココココ
ココココサフサコココココ
サフサフサフサフサフサ
ココココサフサコココココ
ココココサフサココココ
ココココサフサコココココ
ココココサフサコココココ
サフサフサフサフサフサ
WIN32のEXE一つで、下のTEST.AWKがマトモに動くAWKを探しています。
これら以外にありますか?
http://hinadori.atnifty.com/~wills/program/gawkm115.zip
http://my.vector.co.jp/servlet/System.FileDownload/download/http/0/376460/pack/win95/util/text/awk/gawk-mbcs-win32-20051223.zip?ds
http://my.vector.co.jp/servlet/System.FileDownload/download/http/0/80308/pack/win95/util/text/awk/mw32r27.lzh?ds
Cygwin版も試したのですがダメでした。
TEST.AWK
{ gsub("[0-9]","x",$0) ; gsub("ソ","ソ",$0) ; gsub("T","T",$0) ; print }
TEST.DAT
アイウエオカキクケコサシスセソ
ココココサフサコココココ
ココココサフサココココ
ココココサフサコココココ
ココココサフサコココココ
サフサフサフサフサフサ
ココココサフサコココココ
ココココサフサココココ
ココココサフサコココココ
ココココサフサコココココ
サフサフサフサフサフサ
628627
2011/08/19(金) 01:00:20.60 TEST.DATは、空白が入っています。
専ブラのポップアップをコピペして下さい。
専ブラのポップアップをコピペして下さい。
629デフォルトの名無しさん
2011/08/19(金) 06:26:54.92 ウチに帰ってから調べてみるよ
630デフォルトの名無しさん
2011/08/19(金) 11:02:41.54631デフォルトの名無しさん
2011/08/19(金) 11:55:06.25 (CygwinならUTF8じゃないとうまく動かないけど)Shift JISで動作させたいってことかな?
事前にTEST.DATをnkf -wに通したら駄目かな。
事前にTEST.DATをnkf -wに通したら駄目かな。
632629
2011/08/19(金) 21:59:57.43 >>627
スクリプトもDATもSJISで試したけど、上記3つのうち、gawk-mbcs-win32-20051223.zipはダメだったよ。
1行目がこんなんなる。
アxxエオカキクxコサxxxソ
手持ちの
GNU Awk 3.1.7(windows special Nov 24 2009)
で、--ctype=SJISやっても同じ結果になるね。
スクリプト、DATをUTF-8にして、--ctype=UTF8やってリダイレクトしたファイルは正常な結果が出るよ。
リダイレクトしないでコマンドプロンプトに表示させると化けるけど。
スクリプトもDATもSJISで試したけど、上記3つのうち、gawk-mbcs-win32-20051223.zipはダメだったよ。
1行目がこんなんなる。
アxxエオカキクxコサxxxソ
手持ちの
GNU Awk 3.1.7(windows special Nov 24 2009)
で、--ctype=SJISやっても同じ結果になるね。
スクリプト、DATをUTF-8にして、--ctype=UTF8やってリダイレクトしたファイルは正常な結果が出るよ。
リダイレクトしないでコマンドプロンプトに表示させると化けるけど。
633デフォルトの名無しさん
2011/08/19(金) 23:18:25.14 EUCなら半角カナもうまくやってくれるんだが…
634デフォルトの名無しさん
2011/08/24(水) 08:07:37.54 gawkはガンガン機能を拡張してるけど、
そろそろOOP対応してくれないかな。
awk++とかあるけど、標準でOOPできれは便利。
そろそろOOP対応してくれないかな。
awk++とかあるけど、標準でOOPできれは便利。
635デフォルトの名無しさん
2011/08/24(水) 22:44:37.24 > OOP
...もはやawkでやる意味が無いw 他にいくらでもある別の言語でいいじゃん
...もはやawkでやる意味が無いw 他にいくらでもある別の言語でいいじゃん
636デフォルトの名無しさん
2011/08/25(木) 01:14:17.45 awkに在ると便利かもと思うのは参照値くらいかな
配列や関数への参照を値として取り出し格納したり
逆にその値から元の配列にアクセスしたり元の関数を呼んだり出来ると
相当に複雑なデータ構造が表現可能になる、それこそOOPっぽいことも可能だし
でもあんまりややこしいことやるならPerlでいいから必須ではないね
配列や関数への参照を値として取り出し格納したり
逆にその値から元の配列にアクセスしたり元の関数を呼んだり出来ると
相当に複雑なデータ構造が表現可能になる、それこそOOPっぽいことも可能だし
でもあんまりややこしいことやるならPerlでいいから必須ではないね
637デフォルトの名無しさん
2011/08/25(木) 02:28:23.99 > 関数を呼んだり
変数の値を関数名として
var = "sage";
@var();
ってできるけど、それとは違うのん?
変数の値を関数名として
var = "sage";
@var();
ってできるけど、それとは違うのん?
638デフォルトの名無しさん
2011/08/25(木) 04:07:56.67 およ、もうあるのかw
最近のawkは分からねえ…ってことは、配列への参照を使って入れ子の配列とか既に作れちゃったりするのか?
最近のawkは分からねえ…ってことは、配列への参照を使って入れ子の配列とか既に作れちゃったりするのか?
639デフォルトの名無しさん
2011/08/25(木) 10:56:54.36 配列の配列は作れるよ。gawk4なら。
640デフォルトの名無しさん
2011/08/25(木) 19:51:33.84 (´_ゝ`)フーン
641デフォルトの名無しさん
2011/08/25(木) 20:52:51.07 class human {
property name
property sex
property age
method new(x, y, z) {
name = x
sex = y
age = z
}
method say() {
printf("私は%s。%d歳の%sです。\n",name, age, sex)
}
}
class japanese : human {
property name
property sex
property age
method say() {
printf("私は%s。%d歳の%sです。国籍は日本です。\n", name, age, sex)
}
}
BEGIN {
alice = human.new("アリス", "女", 11)
taro = japanese.new("太郎", "男", 15)
yuka = japanese.new("由佳", "女", 18)
alice.say()
taro.say()
yuka.say()
}
property name
property sex
property age
method new(x, y, z) {
name = x
sex = y
age = z
}
method say() {
printf("私は%s。%d歳の%sです。\n",name, age, sex)
}
}
class japanese : human {
property name
property sex
property age
method say() {
printf("私は%s。%d歳の%sです。国籍は日本です。\n", name, age, sex)
}
}
BEGIN {
alice = human.new("アリス", "女", 11)
taro = japanese.new("太郎", "男", 15)
yuka = japanese.new("由佳", "女", 18)
alice.say()
taro.say()
yuka.say()
}
642641
2011/08/25(木) 20:58:10.41 >>635
http://code.google.com/p/lawker/source/browse/fridge/lib/bash/awk%2B%2B/
これを使えばこの程度のOOPはどうにかできる。
本当にこの程度でいいからOOPに対応してほしい。
使う人はほとんどいないと思うが、全くできないのも困る。
http://code.google.com/p/lawker/source/browse/fridge/lib/bash/awk%2B%2B/
これを使えばこの程度のOOPはどうにかできる。
本当にこの程度でいいからOOPに対応してほしい。
使う人はほとんどいないと思うが、全くできないのも困る。
643デフォルトの名無しさん
2011/08/25(木) 22:07:53.46 それは最早awkである必要が全く無い
644デフォルトの名無しさん
2011/08/26(金) 06:00:04.19 function Human(self,name,sex,age) {
self["property___name"] = name
self["property___sex"] = sex
self["property___age"] = age
self["method___say"] = "Human___say"
}
function Human___say(self) {
printf "私は%s。%d歳の%sです。\n", self["property___name"], self["property___age"], self["property___sex"]
}
function Japanese(self,name,sex,age) {
Human(self,name,sex,age)
self["method___say"] = "Japanese___say"
}
function Japanese___say(self) {
printf "私は%s。%d歳の%sです。国籍は日本です。\n", self["property___name"], self["property___age"], self["property___gender"]
}
function methodcall(obj,methodname, m) {
m = obj["method___" methodname]
@m(obj)
}
BEGIN {
Human(alice, "アリス", "女", 11)
Japanese(taro, "太郎", "男", 15)
Japanese(yuka, "由佳", "女", 18)
methodcall(alice,"say")
methodcall(taro,"say")
methodcall(yuka,"say")
}
self["property___name"] = name
self["property___sex"] = sex
self["property___age"] = age
self["method___say"] = "Human___say"
}
function Human___say(self) {
printf "私は%s。%d歳の%sです。\n", self["property___name"], self["property___age"], self["property___sex"]
}
function Japanese(self,name,sex,age) {
Human(self,name,sex,age)
self["method___say"] = "Japanese___say"
}
function Japanese___say(self) {
printf "私は%s。%d歳の%sです。国籍は日本です。\n", self["property___name"], self["property___age"], self["property___gender"]
}
function methodcall(obj,methodname, m) {
m = obj["method___" methodname]
@m(obj)
}
BEGIN {
Human(alice, "アリス", "女", 11)
Japanese(taro, "太郎", "男", 15)
Japanese(yuka, "由佳", "女", 18)
methodcall(alice,"say")
methodcall(taro,"say")
methodcall(yuka,"say")
}
645デフォルトの名無しさん
2011/08/26(金) 06:01:35.02 ごめん一部genderになってるからsexに直しといて
とりあえず、こんな感じでgawk4でもOOP自体は出来るよって話
とりあえず、こんな感じでgawk4でもOOP自体は出来るよって話
646デフォルトの名無しさん
2011/08/27(土) 15:07:17.61647デフォルトの名無しさん
2011/08/27(土) 15:58:44.09 やっぱ別言語使うべきだろ
648デフォルトの名無しさん
2011/08/27(土) 16:10:36.72 本当に欲しいんなら、gawkのMLにこうすればOOP実現できることを発見したんだけど、
これの糖衣構文を用意してくれって投稿するといいんじゃね
switchも実装されてるし、欲しい人が居ると分かれば付けてくれるかもよ
これの糖衣構文を用意してくれって投稿するといいんじゃね
switchも実装されてるし、欲しい人が居ると分かれば付けてくれるかもよ
649デフォルトの名無しさん
2011/08/27(土) 16:25:08.65 #! /usr/bin/env python
# -*- coding: utf-8 -*-
class human:
def __init__(self, name, sex, age):
self.name = name
self.sex = sex
self.age = age
def say(self):
print("私は" + self.name + "。" + str(self.age) + "歳の" + self.sex + "です。")
class japanese(human):
def __init(self):
super(human, self).__init__(self)
def say(self):
print("私は" + self.name + "。" + str(self.age) + "歳の" + self.sex + "です。国籍は日本です。")
if __name__ == "__main__":
alice = human("アリス", "女", 11)
taro = japanese("太郎", "男", 15)
yuka = japanese("由佳", "女", 18)
alice.say()
taro.say()
yuka.say()
# -*- coding: utf-8 -*-
class human:
def __init__(self, name, sex, age):
self.name = name
self.sex = sex
self.age = age
def say(self):
print("私は" + self.name + "。" + str(self.age) + "歳の" + self.sex + "です。")
class japanese(human):
def __init(self):
super(human, self).__init__(self)
def say(self):
print("私は" + self.name + "。" + str(self.age) + "歳の" + self.sex + "です。国籍は日本です。")
if __name__ == "__main__":
alice = human("アリス", "女", 11)
taro = japanese("太郎", "男", 15)
yuka = japanese("由佳", "女", 18)
alice.say()
taro.say()
yuka.say()
650デフォルトの名無しさん
2011/08/27(土) 16:26:25.23651デフォルトの名無しさん
2011/08/27(土) 16:53:49.92 そりゃawkはOOPLではないからな
あくまでシェルのお供でいいと思うんだ
そしてそこに高度なOOP機能は要るとは思えない
どちらかと言えばフィールド抽出とかをもっと便利にすべきだよ
あくまでシェルのお供でいいと思うんだ
そしてそこに高度なOOP機能は要るとは思えない
どちらかと言えばフィールド抽出とかをもっと便利にすべきだよ
652デフォルトの名無しさん
2011/09/17(土) 15:34:39.29 cygwin以外でgawk4.0をwindowsで使おうと思ったら、バイナリはどこで入手できもうすかね?
653デフォルトの名無しさん
2011/09/17(土) 16:28:58.78 cygwin で駄目な理由が分からないから教えられない。
654デフォルトの名無しさん
2011/09/18(日) 08:02:36.95655デフォルトの名無しさん
2011/09/19(月) 13:00:55.06 >654 さんくすこ
>653 awkの実行形式だけ入手すれば良いようにしたいのさ。
>653 awkの実行形式だけ入手すれば良いようにしたいのさ。
656デフォルトの名無しさん
2011/09/19(月) 14:01:43.39 バイナリ互換のWindowsなのに、cygwinてexeをもってくだけじゃ使えないの?
657デフォルトの名無しさん
2011/09/19(月) 16:07:37.39 物によっては使えたような気がする。
cygwin1.dllだっけ?にパスが通ってれば大体使えたような気がする。
cygwin1.dllだっけ?にパスが通ってれば大体使えたような気がする。
658デフォルトの名無しさん
2011/09/19(月) 17:00:12.76 結構沢山のdllが要るよ
コマンドによるけど
コマンドによるけど
659デフォルトの名無しさん
2011/10/24(月) 01:55:49.24 教えてください。英語得意な人
http://www.gnu.org/s/gawk/manual/gawk.html#Array-Sorting-Functions
の asort(), asorti()で使うユーザー定義の比較関数について
3番目の引数とPROCINFO["sorted_in"]に設定するのと違うのか同じなのか?
それと
http://www.gnu.org/s/gawk/manual/gawk.html#String-Functions
に書いてある3番目の引数の説明("descending"とか)が両立してんの?
http://www.gnu.org/s/gawk/manual/gawk.html#Array-Sorting-Functions
の asort(), asorti()で使うユーザー定義の比較関数について
3番目の引数とPROCINFO["sorted_in"]に設定するのと違うのか同じなのか?
それと
http://www.gnu.org/s/gawk/manual/gawk.html#String-Functions
に書いてある3番目の引数の説明("descending"とか)が両立してんの?
660デフォルトの名無しさん
2011/10/24(月) 11:34:13.18 http://www.gnu.org/s/gawk/manual/gawk.html#Array-Sorting-Functions
As with PROCINFO["sorted_in"], this argument may be the name of a user-defined function, ....
http://www.gnu.org/s/gawk/manual/gawk.html#String-Functions
The third argument can also be a user-defined function name ....
第三引数の値と同名の関数が定義済みならそれを利用するとか、
そういう方法で区別してるんじゃないの
As with PROCINFO["sorted_in"], this argument may be the name of a user-defined function, ....
http://www.gnu.org/s/gawk/manual/gawk.html#String-Functions
The third argument can also be a user-defined function name ....
第三引数の値と同名の関数が定義済みならそれを利用するとか、
そういう方法で区別してるんじゃないの
661デフォルトの名無しさん
2011/10/24(月) 13:33:04.59 >>659
比較関数の与え方はPROCINFO["sorted_in"]の場合と同じってことだろ。
自分で定義した関数の名前でもいいし、11.2.1.2に書いてあるようにすでに用意
されている@〜を使ってもいい。
比較関数の与え方はPROCINFO["sorted_in"]の場合と同じってことだろ。
自分で定義した関数の名前でもいいし、11.2.1.2に書いてあるようにすでに用意
されている@〜を使ってもいい。
662デフォルトの名無しさん
2011/11/14(月) 21:59:05.28 個人的には、GAWKにはあと、Cで書いた関数の呼び出しというか
GAWKで呼ぶ関数をCで書ける機能が欲しいと思ってるんだけど、
ここ見る限り世間的にはあんまり需要ないんかねぇ。
まぁ、それやるくらいならGAWK自体に変更を加えて再コンパイルしろってことかもしれないけど。
GAWKで呼ぶ関数をCで書ける機能が欲しいと思ってるんだけど、
ここ見る限り世間的にはあんまり需要ないんかねぇ。
まぁ、それやるくらいならGAWK自体に変更を加えて再コンパイルしろってことかもしれないけど。
663デフォルトの名無しさん
2011/11/15(火) 01:44:31.01 PとかR使え言われると思う。
664デフォルトの名無しさん
2011/11/15(火) 01:58:32.43 >>662
ttp://www.gnu.org/s/gawk/manual/html_node/Dynamic-Extensions.html
じゃダメ?将来的にさらに拡張される可能性はあるみたいだけど
ttp://www.gnu.org/s/gawk/manual/html_node/Dynamic-Extensions.html
じゃダメ?将来的にさらに拡張される可能性はあるみたいだけど
665デフォルトの名無しさん
2011/12/09(金) 00:35:09.18 最近awkcardを知って座右に置いてるのだが、日本語版って存在するのだろうか。
666デフォルトの名無しさん
2011/12/22(木) 16:57:35.32 ttp://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_271
ここに書いてある通りにしても日本語に翻訳されません
どうしてですか?
環境は LinuxMint12 、 GNU Awk 3.1.8 です
ここに書いてある通りにしても日本語に翻訳されません
どうしてですか?
環境は LinuxMint12 、 GNU Awk 3.1.8 です
667デフォルトの名無しさん
2011/12/22(木) 18:01:49.60 >>666
その通りにやったと言うのなら、何故poファイルを提示しないのかね、ダミアン君。
その通りにやったと言うのなら、何故poファイルを提示しないのかね、ダミアン君。
668デフォルトの名無しさん
2011/12/22(木) 18:07:45.38 >>667
poは作成しましたし、moも所定のディレクトリにあります。
poは自分で編集しても、そのサイトの内容をコピペしてもダメでした。
$ cat gettext.po
#: gettext.awk:10
msgid "********** Count Prime Number **********"
msgstr "========== 素数を数える =========="
#: gettext.awk:14
msgid "2 is a prime number."
msgstr "2 は素数です。"
#: gettext.awk:24
msgid "%d is a prime number.\n"
""
msgstr "%d は素数です。\n"
$ ls ja_JP/LC_MESSAGES/
gettext.mo
poは作成しましたし、moも所定のディレクトリにあります。
poは自分で編集しても、そのサイトの内容をコピペしてもダメでした。
$ cat gettext.po
#: gettext.awk:10
msgid "********** Count Prime Number **********"
msgstr "========== 素数を数える =========="
#: gettext.awk:14
msgid "2 is a prime number."
msgstr "2 は素数です。"
#: gettext.awk:24
msgid "%d is a prime number.\n"
""
msgstr "%d は素数です。\n"
$ ls ja_JP/LC_MESSAGES/
gettext.mo
669デフォルトの名無しさん
2011/12/22(木) 18:10:02.43 結果はこの通りです。
$ LC_ALL=ja_JP gawk -f gettext.awk 10
********** Count Prime Number **********
2 is a prime number.
3 is a prime number.
5 is a prime number.
7 is a prime number.
$ LC_ALL=ja_JP gawk -f gettext.awk 10
********** Count Prime Number **********
2 is a prime number.
3 is a prime number.
5 is a prime number.
7 is a prime number.
670デフォルトの名無しさん
2012/01/12(木) 13:56:36.33 ずいぶんawkから離れていて久しぶりに使ったら
nawkに日本語のバグがあることにしばらく気づかなかった
substr()でutf-8のテキストを切り出すとおかしな値になる
gawkでは直っている
nawkに日本語のバグがあることにしばらく気づかなかった
substr()でutf-8のテキストを切り出すとおかしな値になる
gawkでは直っている
671デフォルトの名無しさん
2012/01/12(木) 19:50:49.28 そもそもUTF-8に対応してたっけ
672デフォルトの名無しさん
2012/01/13(金) 00:28:07.37 ttp://blog.livedoor.jp/corbie/archives/cat_94960.html
残念ながら、シフトJIS、UTF-8両方で正常に動作しそうなWindows版gawkは候補の中にありませんでした。
残念ながら、シフトJIS、UTF-8両方で正常に動作しそうなWindows版gawkは候補の中にありませんでした。
673デフォルトの名無しさん
2012/01/13(金) 07:52:50.95 Linuxでは普通に動くが…
674デフォルトの名無しさん
2012/04/29(日) 21:07:39.93 ファイル名が"*.txt"の一覧を取得するとき、"\.txt"でマッチさせると、任意の一文字.(ドット)と解釈されてしまうんですが、いい方法無いでしょうか?
675デフォルトの名無しさん
2012/04/29(日) 22:04:14.36 GNU Awk 3.1.7だとドットにマッチしたけどそもそもawkの話?
具体的にコマンドがほしいな
具体的にコマンドがほしいな
676デフォルトの名無しさん
2012/04/29(日) 22:08:23.01 昭和の頃覚えたアセンブラとC言語
これがあったから
いまだに自分が損な業界で飯を食ってる
これがあったから
いまだに自分が損な業界で飯を食ってる
677デフォルトの名無しさん
2012/04/29(日) 22:36:10.83 >>676
そこからjavaに行ってスマホアプリ開発ならもう一花咲いたかもしれませんねw
そこからjavaに行ってスマホアプリ開発ならもう一花咲いたかもしれませんねw
678デフォルトの名無しさん
2012/04/29(日) 23:09:38.43 馬鹿には無理
679674
2012/04/30(月) 18:07:43.22 >>675
ls | awk '{ if( match($0,"\.txt") > 0) print $0 }'
↑会社のサーバ上でこんな感じのことやろうとしてたんですが、
「gawk: 警告: エスケープシーケンス `\.' は `.' と同等に扱われます」
とメッセージが出力され、ドットが任意の一文字?と解釈されて困っていましたが、
自己解決しました。(自宅のLinuxPCで動作確認しました。GAWK3.1.7及び4.0.1)
"\.txt"では無くて、".txt"で良かったんですね。
お騒がせしました。
もしかしたら、会社のサーバ(RHEL)のGAWKが古くて解決できてないかもしれませんが。
ls | awk '{ if( match($0,"\.txt") > 0) print $0 }'
↑会社のサーバ上でこんな感じのことやろうとしてたんですが、
「gawk: 警告: エスケープシーケンス `\.' は `.' と同等に扱われます」
とメッセージが出力され、ドットが任意の一文字?と解釈されて困っていましたが、
自己解決しました。(自宅のLinuxPCで動作確認しました。GAWK3.1.7及び4.0.1)
"\.txt"では無くて、".txt"で良かったんですね。
お騒がせしました。
もしかしたら、会社のサーバ(RHEL)のGAWKが古くて解決できてないかもしれませんが。
680デフォルトの名無しさん
2012/04/30(月) 20:27:16.48 >>679
match() の第二引数に文字列を与えた場合は事前に正規表現への型変換が行われるが、
その際にエスケープが外れて /.txt/ と同等になってしまう、 ということかと。
つまり "\\.txt" とするか、 正規表現の /\.txt/ を与えればよい。
The GNU Awk User's Guide にもこの現象についての説明はあるが、
~ !~ 演算子についてしか触れられていない。
ttp://www.kt.rim.or.jp/~kbk/gawk-30/gawk_5.html#SEC32
match() の第二引数に文字列を与えた場合は事前に正規表現への型変換が行われるが、
その際にエスケープが外れて /.txt/ と同等になってしまう、 ということかと。
つまり "\\.txt" とするか、 正規表現の /\.txt/ を与えればよい。
The GNU Awk User's Guide にもこの現象についての説明はあるが、
~ !~ 演算子についてしか触れられていない。
ttp://www.kt.rim.or.jp/~kbk/gawk-30/gawk_5.html#SEC32
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★2 [蚤の市★]
- 「偽サッチャー」「自滅的」「時代遅れ」 高市首相の経済政策を海外メディアが酷評 [蚤の市★]
- 【ド軍】山本由伸、WBC出場を決断!ドジャースが本人の意向を尊重、佐々木朗希はチームが故障歴を懸念で不参加 [鉄チーズ烏★]
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ ★2 [蚤の市★]
- 【テレビ】粗品「THE W」バッサリ「おもんない、レベル低い」審査員就任で「日テレが“血の海”に…」 [湛然★]
- 通気取り「⚪︎⚪︎を食べればその店の実力が分かる」←だから何だ?
- 女の子集合!
- ひまでんぼ
- おまえら宝くじは買わないと当たらないんだぞ?
- タバコ吸わんがこれでタバコ吸ってたらカッコ良いかも
- 「鈴木彩艷」←これ読めない奴wwwwwwwwwwwwwwwwwwwwwwwwwwwwww
