1 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 23:55:42 ] 腐っても鯛? 騏も老いては駑馬に劣る? 三人の碩学が生み出したスクリプト言語AWKについて語るスレ ◆ 前スレ awkについて語るスレ pc10.2ch.net/test/read.cgi/tech/1023556171/ ◆ 関係スレ シェルスクリプト相談室 pc10.2ch.net/test/read.cgi/tech/1112553783/ AWKでCGI pc10.2ch.net/test/read.cgi/php/1171804314/ 【sed】シェルスクリプト総合@LINUX Part2【awk】 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/
86 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 10:18:29 ] よく書く一行野郎。 -- du -sk /tmp/* | awk '{sum += $1;} END {print sum / NR;}' # まぁ、duってのは今思いついただけで、実際にduの出力の平均を取ることはないけどね。 -- paste foo bar | awk '($1 - $2) > 1e-3 || ($1 - $2) < -1e-3 {print NR, $0;}' # 一致を見るだけならdiffでいいけど、近似を見るには使えないんで。
87 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 18:34:44 ] >>85 sedは単体の命令を見て「置換」「行の切り捨て」みたいな用途が パッと見て思い付くので疑問は沸かないんです。 awkはひとつひとつの命令を見ても 普通にスクリプト言語の命令としか思えないので 「コード書くならともかく、ワンライナーでどう使うの?」と 疑問をもってしまうんです。 >>86 う〜ん、結構複雑になりますね。 それだと私ならターミナルに書かずに コードに起こしてしまいそうです。 でも、パターンとフィールドを上手く使えば 色々出来る気がしてきました。 例をありがとうございます。
88 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 18:59:18 ] あ、コード書きそうなのは後者です。 平均とか合計みたいなモノには良さそうですね。
89 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:28:50 ] 今日書いた一行野郎。 -- awk '{for (ic = 1; ic <= NF; ++ic) {if (max < $ic) max = $ic;}} END {print max;}' -- これも全フィールドに拡張しているだけで、単に最大値を得ているだけだね。
90 名前:デフォルトの名無しさん [2008/01/22(火) 16:52:32 ] よく書く一行 du -k|awk '$1 > 10000' でかいデレクトリをさがす
91 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 23:34:51 ] 俺がよく書く一行野郎 $ awk 1 > hoge.sh
92 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 12:58:14 ] >>91 それに何の意味が? cat > hoge.shでも事が足りそうだが。
93 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 18:48:07 ] >92 Windowsにawk入れてた時に、こんなヘンな癖が付いてしまった。
94 名前:デフォルトの名無しさん [2008/02/02(土) 12:38:28 ] すみません、初心者ですがawkに関するスレがここしかなかったので。 ↓のソースを書いていただいたのですが、いったいどうすれば使えるのでしょうか? ちなみに、これはフォルダ内のWinrar形式ファイルのリカバリレコードが付いているか否か リストを一括で出力するものです。 よろしこ ************** コマンドラインだけどunrar lt sample.rarの出力利用してリストを作るだけ 使い方はパイプでawkに渡して処理unrar lt *.rar | gawk -f rr.awk awkなんか入ってないだろうから当然そのままじゃ動かない rr.awk #!/usr/local/bin/gawk BEGIN {$rr=0; printf "%-30s\t%s\n", "FileName", "RecoveryRecord";} {if($1=="Solid" && $2=="archive"){ for(i=3;i<=NF;i++) printf "%-30s ",$i;printf "\t";getline;getline; if($0=="Recovery record is present"){printf "Yes / "; for(;;){getline;if($0=="Data header type: RR"){getline;printf "%sbyte\n",$2;break;}} }else printf "No\n";}}
95 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 13:01:48 ] それを動かすにはまず gawk をどこかから入手する。
96 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:48:45 ] >>94 >↓のソースを書いていただいたのですが、 書いた人に聞く。 と答えると、わけのわからん理由を言ってごねるだろうから、 先に言っとくと、そんな見苦しい言い訳するな。 どうせ答えたって、今度は○○がわかりませんとか言い出すんだろ? どっかからgawkを落として展開しろよ。全く、一生ググってろよカス "C:\Program Files\WinRAR\UnRAR.exe" lt *.rar | "gawkのフルパス" -f rr.awk
97 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 19:16:33 ] すいません、あるテキストを{print $1,$2}として抽出して aaa 1 aaa 2 aaa 3 bbb 1 bbb 2 ccc 1 ccc 4 ... とまではできたんですが、並んでいるデータをそれぞれ、 aaa 6 bbb 3 ccc 5 と集計したいんですが、どのようにすればいいでしょうか?
98 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 19:28:07 ] awk '{count[$1] += $2;} END{for (aaa in count) {print aaa count[aaa]}}' あとはソートすればいいはず
99 名前:97 mailto:sage [2008/02/10(日) 20:22:03 ] >98さん、ありがとうございます! 情けないのですが、今まで便利なツールに頼っていて全然コマンドについて理解できていなかったので困っていました。 実はメールログで送信者がどれだけの通数を送信してるかを確かめるためにコマンドでできないか、で>97でつまづいていました。 何とか途中までできたんですが、非常にスーパーエレガントな1行コードでして…。 質問ついでで申し訳ないのですが、 (aaa in count) {print aaa count[aaa]} のaaaについてはどう解釈すればいいのでしょうか?
100 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:33:27 ] >>99 bashとかのforとかと同じで適当な文字列ならなんでもいいです.例に出てきたaaaなんかにするからややこしくなってすみません. for(hoge in list) {...} で配列listのキーを片っ端からhogeに入れてループするって意味になるはずですよ.
101 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:36:22 ] 98じゃないけど awk '{count[$1] += $2;} END{for (i in count) {printf "%s %i\n", i, count[i]}}' こうやって書けばしんせつじゃね? データの中のaaaとloopカウンターのaaaを同じ名前にするのは意地悪だと思うよ
102 名前:デフォルトの名無しさん [2008/02/10(日) 20:37:23 ] 101です。すまんonz
103 名前:≠98 mailto:sage [2008/02/10(日) 20:39:44 ] あー、みんな書いているから私の書いたのは大幅に削るか。 そのENDブロック内は、 for (制御変数 in 連想配列) {...;} というパターン。 その前段のcount[$1] += $2は一行目のとき count["aaa"] += 1と解釈される。以下同様に。 このcountが連想配列として使われているということ。
104 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:42:05 ] >>101 …反省してます いや,ほら,ついいつものクセで…ごめん
105 名前:97 mailto:sage [2008/02/10(日) 20:52:15 ] いえいえいえいえ…そういう意味じゃなくて教わっていながらすいませんです。 上記で書いたとおり便利ツールに頼り切ってて殆ど知らない私が悪いのですが…。 今一生懸命3byte程度の脳みそで勉強してるんですが、2日目で挫折しそうで質問させて貰いました…。 たとえばログには Feb 9 22:44:40 localhost postfix/qmgr[1936]: 345C48C0154: from=<use1@example.com>, size=556, nrcpt=1 (queue active) と必ず出ます。で、 1,生ログをそのまま処理するのが怖い(大きなファイル)ので、日付でログを抽出して別ファイルへ保存。 2,grepで nrcpt=と抽出して、さらにgrep -vで除外するドメインを指定して抽出 3,そしてsedでnrcpt=を削除して 4,ここで>97のように$7と$9を並べたところで脳みそのバッファエラーを起こしました。 この処理の方法もエレガントなことは分かっていますが、恥は承知でお伺いした次第です…。
106 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 07:31:34 ] gsubで[.*]を置き換えるにはどうすればいいでしょうか?
107 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 02:38:02 ] >>106 それはリテラルとして扱ってということかい? なら全部エスケープすればいいと思うが何か問題があるの?
108 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 01:08:44 ] awkで現在時刻からn分前から以降のログだけを抜き出したいんですが、どうすればいいでしょうか…。 02 15 12:34:56 xxxxxxxxx 02 15 13:45:01 xxxxxxxxx ... ... ... とかの形式なので、strftime()とかで現在とログの時刻を比較して抜き出す、とかを試したんですがダメでした…
109 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 01:49:16 ] >>108 これで駄目かな?(一応 gawk 3.0.4 では動いた) BEGIN{ n=5 basetime=strftime("%m %d %H:%M:%S", systime()-60*n) } { chktime=substr($0, 1, 14) if(chktime >= basetime) print }
110 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 02:23:28 ] >109 ありがとうございます…素直に目が鱗でした…。 > chktime=substr($0, 1, 14) なんですね… perlが使えない環境なので、これが分かればいろいろ流用効くので助かりました。 ありがとうございます。もうちょっと精進します。。。
111 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 18:58:36 ] >>29 昨年6月に「AWKを256倍使うための本」が本屋の書棚にあったので買いました。 奥付に 1993年8月21日初版発行 2007年5月9日 第1版第16刷発行 と書かれています。
112 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 22:32:44 ] >>111 いつのレスにレスしてんだ(w モレも買ったけど、まだ大きな本屋で見かけるね。
113 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 02:59:17 ] >2007年5月9日 第1版第16刷発行 本屋の棚で眠り続けてたってわけじゃないのかw
114 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:57:13 ] 目が鱗 に一致する日本語のページ 約 1,920 件中 1 - 20 件目 (0.24 秒)
115 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:00:56 ] メガ鱗
116 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 21:53:28 ] sed, awk, ruby を使う。 それぞれ適材適所で使うけど、 「sed だけ」「awk だけ」で済ませられると、 不思議な喜びを感じる。
117 名前:デフォルトの名無しさん [2008/03/30(日) 14:05:33 ] >>116 うち、AIX使ってるんでksh+sed+awk+perlだな。 rubyが標準でインストールされてる環境ってあんまないと思う。
118 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:22:26 ] 古いサーバだとPerlすら入ってない事があるからawkは重宝する。
119 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 10:26:45 ] 最近のgawkがネットワークにも使えると知ってちょっと驚いたw カーニハンの本レベル(とか256倍)しか知らない人って多いと思う。
120 名前:デフォルトの名無しさん [2008/04/06(日) 12:44:41 ] ノーマルのawkでXMLを字下げしたりしてうまく表示させるにはどうすればいいのかな・・・
121 名前:デフォルトの名無しさん [2008/04/06(日) 17:09:18 ] sedだけで書けると、俺って頭イイかもって思う。 #!/bin/sed -f
122 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 17:16:17 ] 文字列の単純な置換だけならawkより簡単に書けるんだけど。 awkに固執しないで臨機応変にsedを使うって意味でなら要領がいいという意味で賢いけど。 # awkで書いた方が簡単なことをsedで頑張って書いたのだとしたら、その意味では頭悪いなw
123 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 17:34:45 ] awkからsystemでsed呼ぶことは時々あるw
124 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 18:49:04 ] >>24 awkって表計算のような処理に特化してますよね。 その点が非常にユニークというか事務処理の言語だな、と。 visicalc(1979)awk(1977)ですからawkのほうが若干古いんですが、 表計算はセルに直接式を書くという発想が新しかった。うむむ。
125 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 19:26:56 ] VisiCalcの考案者Dan Bricklinによるアイデアの説明 ttp://www.danbricklin.com/history/saiidea.htm Danの電卓がHPじゃなくてTIなのが意外な感じ。 The idea for the electronic spreadsheet came to me while I was a student at the Harvard Business School, working on my MBA degree, in the spring of 1978. Sitting in Aldrich Hall, room 108, I would daydream. "Imagine if my calculator had a ball in its back, like a mouse..." (I had seen a mouse previously, I think in a demonstration at a conference by Doug Engelbart, and maybe the Alto). And "..imagine if I had a heads-up display, like in a fighter plane, where I could see the virtual image hanging in the air in front of me. I could just move my mouse/keyboard calculator around, punch in a few numbers, circle them to get a sum, do some calculations, and answer '10% will be fine!'" (10% was always the answer in those days when we couldn't do very complicated calculations...)
126 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 02:52:10 ] はじめましてgawkの質問です お手すきの時にでもご解答頂けましたら助かります 2chでお話していただいた方からgawkを教えて頂きました 正規表現でマッチした部分がいくつあっても全ての箇所を1アクションで保存できる優れものです 当方、言語は全く知らないので先ほどまでテスト実行しては驚いていました この優れものを今後末永く使っていきたいのですが 下記の事項をググって見たのですがわかりませんでした どなたかわかる方おられましたら教えて下さい 私のやりたいこと ・EUCを読み込んでS-JISを出力 ・既存のテキスト末尾に追加書き込み保存 (教えて頂いたスクリプトは上書き保存なので出力先の内容が消えてしまいます) 気長に待っていますので何卒よろしくお願い致します
127 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 03:10:31 ] >>126 前者はawkでやるべきことではない。iconv, nkfなどそれ専用のツールがある。 後者も必ずしもawkは不要。コマンドラインが使える環境なら普通にできる。 例えば、Unix系なら cat append.txt >> original.txt で既存のファイルに追加できる。 DOS系でも、type append.txt >> original.txt でできる。 要は、awkのいいところはそれ単体でなんでもできる(或いはできない)ことではなく、 コマンドライン環境で力を発揮するツールであること。 例えば、正規表現でマッチした文字列を置換するだけならテキストエディタでもできる。 あーそうそう、エディタがあれば文字コードの変換もそれだけでできる。 所謂テキストエディタを使ったことがないなら、一度(正規表現検索機能、 文字コード変換機能のある)テキストエディタを触ってみるといいかもしれない。
128 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 03:32:54 ] >>127 さん >>126 です お疲れのところ早々のご解答誠にありがとうございます コンバートは別のツールで行う DOS環境ではtype append.txt >> 出力先ファイル名で追加書き込み 了解しました エディターは秀丸エディターを使っています コンバートは出来るのですが検索でマッチした文字列は1箇所ずつコピーなんです sakuraエディターで一括コピーや切り取りが出来ると教えてくれた方もいてたのですが sakuraエディターは試したことが無いんです 詳しくありがとうございました
129 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 03:56:33 ] AAA.txtを開き”東京(.+?)号室”を検索する マッチした複数箇所を一括でコピーしてTEST.txtにペーストする BBB.txtを開き”東京(.+?)号室”を検索する マッチした複数箇所を一括でコピーしてTEST.txtの末尾にペーストする CCC.txtを開き”東京(.+?)号室”を検索する マッチした複数箇所を一括でコピーしてTEST.txtの末尾にペーストする よろしくお願いします
130 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 04:02:07 ] >>127 は結局awkの解答はしないのになんでしゃしゃり出てきたの? できないじゃん
131 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 06:48:34 ] >>130 質問に具体性がないから一般論を書いただけだけど。 >>129 awk '/東京(.+?)号室/ {print > "TEST.txt";}' AAA.txt awk '/東京(.+?)号室/ {print >> "TEST.txt";}' BBB.txt 以下同様に。
132 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 12:02:34 ] >>131 レスありがと gawk '/東京(.+?)号室/ {print > "TEST.txt";}' AAA.txt gawk '/東京(.+?)号室/ {print >> "TEST.txt";}' BBB.txt ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。 gawk3.16では使えない?
133 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 13:29:56 ] >>132 DOSのコマンドラインの使い方は他所で聞いてくれ。
134 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 13:38:24 ] 役所の窓口みたいな対応だな。
135 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 13:43:47 ] DOSのコマンドラインについては多くを知らないんだよ。
136 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 16:36:42 ] DOSの場合は空白を含む場合シングルクォートじゃダメだからな。 ダブルクォートで括って中のコードは シングルクォートか、エスケープしてダブルクォート入れるか。 一番簡単なのは、ワンライナーでもファイルに起こしてしまうこと。 gawk -f myscript.awk AAA.txt とやってしまえば、シングルクォートとかダブルクォートとか気にする必要はない。
137 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 18:22:15 ] >>132 二つ問題がある。 gawkの正規表現では.+?というのは使えない。 cmd.exeでは、シングルクォートを引数を くくるのに使えない。 なんかよくわからんが、perlでテキストを丸飲みしてから 処理すればいいんじゃないのか?
138 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 19:00:42 ] VisiCalc といえば、出始めの頃に TRS-80 用 を Radio Shack で見せてもらったんだけど、学生だった私には価値がわからなかったなぁ。 まぁ、これに限らず、『なんでこんなコマンドやオプションがあるんだ?』ってのは多い。 使い方じゃなく、なぜそれがあるのかを包括的に解説した本や web site ってありますか。(たとえば多くの unix コマンドを網羅しているとか)
139 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 19:01:22 ] ああ、スレ違いだった。ごめんごめん。
140 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 19:58:47 ] なんという誤爆
141 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 02:42:04 ] >>132 もう居ないかな。gawk3.1.6 + nkf2.0 使用@cmd.exe C:\work>type aaa.txt (※EUCなので化ける事を確認) 、ロ、イ、ロ、イ ナ・ケ貍シ ナ・」イケ貍シ ナ・」ア」ーケ貍シ ナ・、ロ、イケ貍シ ナ・、ユ、ャケ・ナ・ユ、ャケ貍シ ナ・」ウケ貍シ、ネナ・」オケ貍シ C:\work>nkf -Es AAA.txt ほげほげ 東京号室 東京2号室 東京10号室 東京ほげ号室 東京ふが号 東ふが号室 東京3号室と東京5号室 C:\work>nkf -Es AAA.txt| gawk "/東京.*号室/{print $0}" 東京号室 東京2号室 東京10号室 東京ほげ号室 東京3号室と東京5号室 既出の通り文字変換nkf(>>127 ) 正規表現の制約で条件変更(>>137 ) 実際に使う場合はこんな感じでバッチ作るとか。 C:\work>nkf -Es AAA.txt| gawk "/東京.*号室/{print $0}" >>TEST.txt
142 名前:141 mailto:sage [2008/05/06(火) 02:56:02 ] と、方法を書いておいてアレだけど、 秀丸使ってるならgrepの実行で検索するファイルに(現在の内容)で 検索結果からファイル名と行番号を除去するのでもできそうな気がする。 盛大にスレ違いだけど。
143 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:28:43 ] >>142 さん ありがと まだ思うようにできていないんだ 参考になるよ感謝です
144 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:50:26 ] ひでえwwwwwwwwwwwwww
145 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:50:57 ] すまん誤爆
146 名前:デフォルトの名無しさん [2008/06/25(水) 02:17:58 ] 質問です! 以下のファイルhogeからawkで、価格を抜き出して合計値を出したいと思っています。 ファイルの内容は、書籍名と価格です。価格は一番後ろの数字になります。 ---------------------- $ cat hoge それいけ!あんぱんまん 1000 メタボリックを撃退せよ 1000 下流社会 1000 上流社会と下流社会 日本のこれから 1000 論文 2008 日本の抱える問題 1000 論文 2007 日本の抱える問題 過去問題集 1000 ---------------------- 難しいのが、書籍名の2008や2007などの数値が含まれていることや空白が含まれていることです。 1行目の場合2列目が価格になりますが、2行目の場合4列目が価格となります。 このように一番最後の列(価格)を取得し、合計値を計算するにはどうすればよいでしょうか? ご教示お願いいたします。
147 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 02:28:00 ] awk '{x+=$NF}END{print x}' hoge
148 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 09:33:15 ] xじゃなくてsumとかにしようよ。
149 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 13:36:51 ] 一行野郎は手数(打数)重視なんじゃまいか
150 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 15:27:28 ] 難しいってマニュアル読めば最後の要素を指すものが何か書いてあると思うが
151 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 16:09:13 ] 読んでたら他人になんか聞きません。
152 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 16:34:16 ] じゃあ、マニュアル読んでもわからなかったらお手上げか
153 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 21:37:04 ] Windows 版の gawk-3.1.5 で`双方向パイプがうまく動作しません。以下、 www.kt.rim.or.jp/~kbk/gawk-3.1/gawk.html#SEC182 からのサンプルファイルですが、途中で止まってしまって、返事が返ってきません。 BEGIN { command = "sort" n = split("abcdefghijklmnopqrstuvwxyz", a, "") for (i = n; i > 0; i--) print a[i] |& command close(command, "to") while ((command |& getline line) > 0) print "got", line close(command) } Cygwin の gawk では問題ありませんでした。
154 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 20:42:14 ] これ使うといいよ ttp://www.pipeunish.jp/
155 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 01:35:15 ] どうやったら Cygwin の gawk(GNU Awk 3.1.6) で print length("あいう") が 3 になるのですか?
156 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 02:13:54 ] Windowsのバージョンくらい書こうな。でないと釣りと思われるよ
157 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 08:51:57 ] jgawk?
158 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 09:32:16 ] gawk.dllって、まだ誰かメンテしてくださってるんでしょうか? 最新版gawkのdllを探してるんですが、見つかりません。 または、ソースのtar.gzからdllを作る方法が載っているページを 御存知の方がいらっしゃいましたら、教えていただけると助かります。
159 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 10:34:53 ] なにをいってるのかわからん ソースのtar.gzってなに?
160 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 10:42:47 ] ftp.gnu.org/gnu/gawk/ からダウンロードできるgawk-*.tar.gzのことですが。。 sourceからgawk.exeを作ったりしないのですか?? dllと書いているのでわかるかとは思いますが、 windows環境下での話です。普段はcygwinでmakeしたgawkを使っているのですが、 dllがあると他の言語から呼び出して使えるので便利かなーと思ってます。
161 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 10:45:49 ] cygwinはwin用のソースじゃないから win用のソースがいる
162 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 11:53:32 ] >>160 昔あったDLL版は作者が独自に作ったものみたいで 本家に反映されてないから本家のソースからDLLを作るのは無理。 DLL版のソースを参考にして自力で作るか できないなら作者に連絡して協力を求めるしかない。
163 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 12:05:07 ] >>160 自分で改修するしかないだろ
164 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 02:36:53 ] (ノ∀`) アイタタタ
165 名前:155 mailto:sage [2008/07/05(土) 15:47:31 ] >156 XP [Version 5.1.2600] でつ
166 名前: [―{}@{}@{}-] デフォルトの名無しさん mailto:sage [2008/07/05(土) 17:55:22 ] >>153 まだ見てるか? 多分なおってると思うんで新しいので試してみてくりや。
167 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 06:36:13 ] うお? 作者降臨か
168 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 07:02:21 ] すんばらすぃ
169 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 00:40:48 ] AWK 使って15年? 30年前のコードが吐き出すデータをちょこっと処理しようとして… FS=/[ ()]+/ は期待通りの動きをせず、FS="[ ()]+" と書かねばならない。 初めて知った。 検索しても、これについて明快に書いてあるページがなかなか見つからなかったが >正規表現定数がそれ自身として現れたとき、それはパターン中に現れたかのように、 >つまり`($0 ~ /foo/)' のようにみなされる。 <中略> >言語のこの機能は、POSIX標準までドキュメント化されなかった。 orz これで1時間ぐらいムダにした。私が知らなかっただけですか??
170 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 00:58:40 ] 『プログラミング言語AWK』には一応載ってるけどな > (FSに代入される)文字列が1文字より長いときは,正規表現として扱われる
171 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 01:10:48 ] ベル研系統の言語は記述の自由度はあるが挙動がつかみづらい
172 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 02:09:53 ] >>170 ””で囲んだ文字列が正規表現として扱われる ということと //で囲んだ正規表現定数で書いてはいけない ということは同じではない。 実際、split関数の 第3引数に与える正規表現は どちらでも動く むむむ、ここでは($0~/foo/)に置き換えて評価されないんだ… 171の意見が正しいようだね チャンチャン
173 名前:デフォルトの名無しさん [2008/07/21(月) 12:39:44 ] 複数のファイルの読み込みってできますか? print ファイル1の$2 ファイル2の$1 みたいな感じで
174 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 13:06:32 ] >>173 pasteで繋いじゃダメ? 私はよくやるけど。 仮にファイル1が5カラム固定なら、 paste ファイル1 ファイル2| awk '{print $2 $6;}' てな感じで。 # カラム数可変ならもう一捻り必要だけどね。
175 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 13:50:02 ] >>173 awkだけでやりたいならgetlineを使えばできる。
176 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 18:37:52 ] awkすごい便利で、gnuplotと組み合わせてExcelから解放されつつあります。 上の方にあったDFAとNFA使ってる事からくる違いってなんですか?
177 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 02:40:07 ] >>176 一番の違いは、DFAだと後方参照ができないことかな。 とりあえず DFA 前準備に手間を掛けるけど処理そのものは早い NFA 即座に処理を始めるけど、処理に時間がかかる場合がある。 ぐらいに考えておけばいいと思う。
178 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 00:57:57 ] 保守
179 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 14:34:05 ] sh + awk は明らかに簡単だと思う。 sh + awk で出来ることを perl のみで記述する人の気持ちがどうしても理解出来ない。 ただ、ネットワークプログラミング以上になるとC, perl, ruby にならざるを得ないけど。 マシン単体での種々の手続き記述だと、 sh + awk がやっぱり一番完結になると思うんだけどな〜。
180 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 14:49:58 ] おれもawkでできることならawkでやる。 でもあまりにトリッキーなことになりそうだったらperlでやったりするかな。
181 名前:あいちゃん mailto:sage [2008/08/03(日) 01:39:18 ] 人に渡す可能性があるなら、awkは結構つらいことがある。 Perlでやれば基本的に問題ないから、Perlで書く癖がつく。 ShellScriptでいったん使うだけなら、awkは便利だけど。
182 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 01:23:58 ] >>180 俺も AWK でできるならAWK。 と考えると バイナリーのデータいじる以外はAWKでできるのでは… (少なくとも 俺に日常のニーヅでは そうだ)
183 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 02:16:24 ] >>182 同感。ただバイナリは仕方ないにしても、 全半角混在の固定長フォーマットが扱いにくいんだよな。 ASCIIにすると全角のみ部分が処理しにくいし、 SJISとかにすると正しく切り出せないし・・・ あれはなんとかならんものかな。
184 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 01:55:09 ] やっぱり ASCII だけの問題にしておいた方が無難。
185 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 15:38:13 ] ttp://www.kt.rim.or.jp/~kbk/gawk-3.1/ でダウソできるのがASCIIとSJISをうまく扱えるやつぢゃねの?
186 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 00:38:23 ] >>185 いや、そのgawk使ってるけど、全半角混在の固定長は困るはず。 両方別々なら問題なく扱えるけど、同時には扱えない。 例えば。SJIS1行5バイト+改行の固定長ファイルで 1行は2項目(a:全半角混在4バイト b:半角のみ1バイト)のファイルがあるとき。 asciiモードならa, bを切り分けられるがaの全角文字は処理できない。 sjisモードならa, bを切り分けられない。 悩ましいのは、項目を切り分けるスクリプトをascii オプションで起動して 出力結果をsjisで処理すれば(めんどくさいけど)現状で処理できてしまう。 ので、マニュアルに書いてある通り、作者をおねがいすれば可能性はあるかもしれないが、 お願いするのが躊躇われる感じなのね。
187 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 22:12:09 ] awkは時代の関数だから使われなくなっていくんだろなあ
188 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 02:08:00 ] UTF-8の場合でも固定長は半角幅しか対応できてない。 文字数とバイト数と表示幅とか、日本語は面倒だのう。 length()とかでバイト数を拾えないから自前で処理もやりにくい。
189 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 22:37:59 ] >>188 一瞬納得しかけたけど。 冷静に考えると、そもそも1文字が可変長であるUTF8を 固定長ファイルの文字コードに使おうと考えた奴を締め上げて 泣くほど問い詰める方が先だと思うのは俺だけ? 考えても考えてもメリットが思いつかないよ…
190 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 00:40:10 ] >>189 ほとんどの文字コードが可変長だからなあ。 相対的に見ればマシな方に入るんじゃない? ホストが絡むと文字コード周りは悲惨だよ… ホストじゃないならそもそも固定長じゃなくて良いんだけどね。
191 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 01:53:25 ] あるフィルタスクリプトをgawkで書いているのですが 文字のコードを整数値に変換しようとしてうまくいきません たとえば「c」という文字のコードを整数値にしようとして BEGIN { testChar = "c"; printf("testChar=%d\n",testChar); } のようにしても「testChar=0」と表示されてしまいます 良い方法があればお教えください
192 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 03:21:15 ] >>191 awklib に ord ってユーザー定義のライブラリ関数があるからそれを使う。 自前で作ってもいいけどね。 くわしくは info gawk で調べて。
193 名前:191 mailto:sage [2008/08/23(土) 03:28:08 ] >>192 ありがとうございます 早速検討してみます
194 名前:191 mailto:sage [2008/08/23(土) 10:56:41 ] >>192 ttp://www.kt.rim.or.jp/~kbk/gawk-30/gawk_16.html にあったものを試してみました.期待どおりの動作をしてくれます. どうもありがとうございました.
195 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 01:12:37 ] 入力内容をawkで生成することは出来ますでしょうか もしくはBEGIN等のブロック内で文字列を生成して その文字列のパターン毎に分岐、フィールドを使っての処理 (要はawkに入力ファイル渡した時に簡単に書ける処理) を簡単に書くことは出来るのでしょうか 例えば…どんな処理が適切な説明か判りませんが BEGIN{for(i=0;i<10;i++) print int(rand()*10),int(rand()*10),int(rand()*10)} の結果に対して $1+$2+$3<10{ print $1+$2+$3 } $1+$2+$3>=10{ print ($1+$2+$3) % 10 } …とかそんな感じで、テキストを生成した結果に対して フィルターとして比較式や正規表現で分岐して、フィールドを使って処理する感じです。 やっぱりバッチファイルとawkファイルをいくつも作ったり 一行一行に対してif文で分岐したりsplitで分割するしか無いですかね…。
196 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 01:52:51 ] >>195 敢えて入力を生成したいのなら、awkをパイプで繋げばいいと思う。 そうではなく、単に乱数で処理を振り分けたいのなら普通にif文でいいと思う。 それはさておき、 -- $1+$2+$3<10{ print $1+$2+$3 } $1+$2+$3>=10{ print ($1+$2+$3) % 10 } -- は別に上の条件式は要らんだろ。一桁の数値を10で割った余りは元のままだからな。
197 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 14:18:55 ] >196 いやあくまで例題なので内容は深く考えないでください…orz 普通にif文とは言うものの、折角awkが標準で備えてる便利な機能を無視して冗長な書き方するのも難だし かと言って.awkファイル複数個とバッチで、パイプでつなげて処理するのも…う〜ん、となってしまう。 良い書き方無いかなぁと思ったので聞いてみたのですが、ifとsplitで頑張ります。
198 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 02:58:54 ] 質問がよくわからんのだが、BEGIN部で生成したファイルを処理部で扱いたいということかな? 例えば、 gawk 'BEGIN{ ARGV[1]="in_file.txt"; ARGC=2; }{ print }' ってやったら in_file.txt を表示できるぞい
199 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 09:51:03 ] >198 !!! 目から鱗です。 そっか、ファイル生成しちゃえば一発で行けるのか…やってみます
200 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 15:07:48 ] うげ、一旦ファイルを作るのはありなのかよ。 ifを使うのは冗長なのに、ファイルを作るのは冗長じゃないってどんなセンスなんだ。
201 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 17:48:16 ] >200 入力データは規則性のあるもので、生成してしまえるけど それに対しての分岐は多い…という場合 ifやsplitを羅列するよりも、awkが元々持ってる パターンとフィールド分割を使った方が スッキリすると思うのですが間違ってるでしょうか…。
202 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 19:39:26 ] >>201 別にいいんじゃね? 巨大な中間ファイルを作るってわけでもないんだろうし。 まぁ、次の理由で私は中間ファイルを作るのは避けるけどね。 ・フルパスを指定しない場合、カレントディレクトリに書き込み権限がある保障がない。 ・そもそも同名ファイルが存在していて書き込み権限がないかも知れない。 ・つーか、同時に2件動かしたらバッティングしてしまう。 ・だからと言って、一々ユニークな名前のファイル名を生成するのも面倒だ。 ・しかも、中間ファイルは後で消しておく必要があるかもしれない。 それと、自前で入力を生成するなら、最初から分割された状態で作ればいいからsplitは要らないね。 パターンを使うかifを使うかは趣味の問題のような気がするけど。 # $1+$2+$3<10{print;}と書くかif($1+$2+$3<10){print;}と書くかの違いだもんね。
203 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 01:19:00 ] 色々考え方があるのね。 自分ならトリッキーな細工して1つに収めず分割してif使わずに書くけど。 手早くカタをつけられるのがawkの良い所だと思うし、 技巧に走ると間違いなく忘れるのでメンテ不可能になる可能性大 ま、それはそれとして>>198 はパズル的な面白さがあって良いね。
204 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 19:54:42 ] >202 う〜ん、言われてみればそうかも。 一応、今回のは仕事で使うわけでもなければ他人に使ってもらう予定もない 完全な個人用スクリプトなのでどうにでもなりますが これが業務や自分以外も使うものであれば素直にifなんでしょうね。
205 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 20:50:40 ] 2008/09/15 13:17 61 20080915142145.txt 2008/09/16 13:17 316 2008091611529.txt 2008/09/22 20:09 24,028 2008_0922asahiindex.txt 2008/09/22 12:57 1,545 clean.txt というファイル一覧から、gawkで今日の日付のファイルだけ抜き出すにはどうすりゃいいんだっけ? BEGIN{month = strftime("%m",systime()); date = strftime("%d",systime())} /month/ && /date/ {print $0} でいいかと思ったら、/ /のなかにmonthとかは使えないらしい。 /strftime("%d",systime())/ {print $0} とべた書きしてもだめ。 ど忘れ中。ヘルプミー。
206 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 21:05:13 ] BEGIN{date=strftime("%m/%d")} $0 ~ date {print $0}
207 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 21:45:34 ] >>206 thanks!
208 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 19:41:51 ] 質問です。 入力中のファイル名はFILENAMEにセットされますが、 入力中のファイルのパスを取得するにはどうしたらよいですか。
209 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 22:13:43 ] >>208 FILENAMEで得られる情報が全て。フルパスが欲しいということなら、 cwdを取得してそこからの相対パスがFILENAME。
210 名前:デフォルトの名無しさん [2008/11/12(水) 19:19:08 ] awkの結果を set か setenv の変数に代入したいです。 awk '{ print $1+ $3 }' test.txt で数値が出ます。 この結果を変数に代入するにはどうしたらいいんでしょうか? set tmp=`awk '{ $1+ $3 }' test.txt` これだと上手くいきません。print はそのままでいいのでしょうか?
211 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 20:24:22 ] なんで print を省略できると考えたのかが謎だが
212 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:57:16 ] >print はそのままでいいのでしょうか? まず試せよw
213 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 14:17:14 ] 新紀元社のプログラミング言語awkがどこも売り切れなんだけど もう入らないのかな
214 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 03:02:56 ] >>211 printは画面表示するもの→変数に入れるだけなら不要 …と思ったんじゃ内科ね
215 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 11:28:33 ] カンマ区切りのデータファイルがあり、その中で、第1フィールドと第3フィールド内にもし 子音、子音、子音、母音が存在すればその行だけ抜き出すオークのスクリプトファイルをつくりたいのですがどうすればよいですか
216 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 11:41:15 ] >>215 データファイルのサンプルと抜き出したい行ヨロ
217 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 11:50:40 ] こんな感じです takeshi,fiad,fdjioaf,fdjsoafds(←該当なし) dddacea,fsaofsa,rrra,fjisaofdjsa(dddaとrrraが該当) aexxxu,dsoifsa,yyyuo,fjsaofa(xxxuとyyyuが該当)
218 名前:びぎなぁ mailto:sage [2008/11/18(火) 12:12:55 ] オークスクリプトを実行すると情報を表示するようにしたのですが1行目と最後の行だけを表示しないようにするには END内に何て書けば宜しいでしょうか
219 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 12:43:59 ] >>215 BEGIN{FS=","} function term_check(term, lower_term) # lower_term は局所変数 { lower_term=tolower(term) if(lower_term ~ /[bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][aiueo]/) return 1 return 0 } { if(term_check($1) && term_check($3)) print } パターン繰り返しって {3} とかでいけるはずなんだが 書き方知らないのでコピペしたw
220 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 12:47:37 ] >>218 逐次出力してる? END でまとめて出力してる?
221 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 13:53:22 ] >>218 1行ずつバッファリングして、次の行の入力で前の行を出力すれば最後の行は消えてなくなる。 awk 'NR > 2 {print buffer;} NR > 1 {buffer = $0;}'
222 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 14:20:29 ] >>215 gawkなら awk -F "," -v r="[bcdfghj-np-tv-z]{3}[aiueo]" --posix '$1 ~ r && $3 ~ r' $1と$3どちらか一方にあればいいなら&&を||に変えてね
223 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 16:29:37 ] >>219 助かりました!
224 名前:びぎなぁ mailto:sage [2008/11/18(火) 16:46:03 ] 出来ました ありがとうございます
225 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 23:48:41 ] 込み入ってて整理できないので教えてください。 ・対象のテキストは2行目がない(1行目しかない)かつ ・1行目はひらがなカタカナ漢字で15文字以内 という条件を書くのって、次のようにしたのですが、うまくヒットしません。 どう書けばいいでしょう? NR==2 && length($0) == 0 && NR==1 && /[ぁ-んァ-ヶ亜-腕]{1,15}/
226 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 23:53:31 ] >>225 NR == 2 && NR == 1じゃ、絶対成立しないだろ。
227 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 23:54:54 ] awkは行を1行ずつ処理するから、事前にトータル行数を知ることはできない。 トータル行数が1行であることを保証したいなら、ENDブロックで処理するしかない。
228 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 00:22:37 ] >事前にトータル行数を知ることはできない BEGIN部で数えれば?
229 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 00:28:19 ] >>228 どうやって? 対象がファイルである保証があるならwcでも呼べばいいけどそれならawkでやる必要さえないよね。
230 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 03:49:07 ] { a = $0 } END { if (NR == 1 && a ~ /re/) print a } とか?
231 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 23:58:06 ] どなたか、任意ビット幅の2の補数HEXをDECに変換するプログラムを書いてもらえませぬか?
232 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 12:02:58 ] 仕様が不明確なところがあるし、なによりなんでawkで?
233 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 22:53:51 ] >>232 ここがawkスレだからでしょ。
234 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 03:05:38 ] >>232 考えるな。感じろw
235 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 07:21:00 ] 「あなたは何故awkでやろうとするのですか?」 「そこにawkがあるから」
236 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 04:23:45 ] awkからsystem()でgrepとかsedとか呼んだりする癖が付いている シェルスクリプトにする方がむしろ違和感
237 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 23:56:31 ] おいおい、grepやsedぐらい呼び出さずにawkでやろうぜ。
238 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 00:29:26 ] grepやsedはパイプでつなげて使うものじゃないの?(^^;
239 名前:デフォルトの名無しさん [2009/01/10(土) 22:10:41 ] gawk 3.1.4 mb のwindows版のEXEファイルが欲しい…
240 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 00:38:51 ] なんでそんな古いバージョンが欲しいの?
241 名前:デフォルトの名無しさん [2009/01/11(日) 12:16:04 ] >なんでそんな古いバージョンが欲しいの? lengthとかsubstrで、「j」付き文字列関数があるからです。 3.1.5以降だと、同じスクリプトファイル内で、バイト単位処理と キャラクター単位処理の混在が難儀なのです。
242 名前:240 mailto:sage [2009/01/11(日) 15:01:36 ] 3.1.5で文字の扱いが変わったのはその通りだけど、3.1.4のWindows版て jlengthやらあったっけ? なかったと思うんだけど。
243 名前:デフォルトの名無しさん [2009/01/11(日) 15:48:22 ] >なかったと思うんだけど。 えっ。3.1.4以前のはバイト単位オンリーって事ですか? …それでも2バイト換算で扱えばいいから、まだマシかも。 j付きが追加されていたけど、動作変更に伴って廃止された… と思っていました。 記憶にあるのは、どなたかの独自拡張別Verだったのか…?
244 名前:240 mailto:sage [2009/01/11(日) 17:54:21 ] > えっ。3.1.4以前のはバイト単位オンリーって事ですか? ちゃう。 jなんとかがあったのは、 2.11ベースのjgawkと2.15ベースのjgawk 2.15ベースのとgawk+mb 3.0.xベースのgawk+mb で、3.1.xベースのにはなかったという話だったと思う。 それぞれやってる人が違う。
245 名前:デフォルトの名無しさん [2009/01/11(日) 19:05:17 ] >3.1.xベースのにはなかったという話だったと思う。 そうですか…。 gawk 3.1.4 mb のwindows版のEXEファイルが欲しい… ではなくて、 3.0.xベースのgawk+mb のwindows版のEXEファイルが欲しい… という事になる訳ですが…無理っぽい。 あっても関数や組込変数が減少…その前に16bitDOS版ONLYの予感…。 諦めます。240さん、どうもでした。
246 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 19:50:26 ] >>245 www.hinadori.atnifty.com/~wills/ にあるよ。3.0.6のやつ。 DOS版だけじゃなくてWin32版もある。 3.0.6→3.1.xで増えた機能でも使ってんの?
247 名前:デフォルトの名無しさん [2009/01/11(日) 22:30:39 ] >あるよ。3.0.6のやつ。 おお。 ありがとうございます。 >3.0.6→3.1.xで増えた機能でも使ってんの? いつ何が増えたのかよく把握していないんですが、 gensubとかmktimeとかswitch-caseとか…ありますかね。 まあ、代替手段はあるので試してみます。どうもです。
248 名前:デフォルトの名無しさん [2009/02/23(月) 08:11:12 ] awkで、組み合わせの全てを作る、という事はできるのでしょうか? いわゆるnCrの、個数ではなくて、中身を知りたいという事なのですが・・・。 (mawkを使っています)
249 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 18:18:34 ] >>248 できます
250 名前:sage [2009/03/04(水) 15:23:19 ] 248です。 なんとかできました。249さんどうもです。
251 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 15:24:16 ] sage間違えた…
252 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 11:47:59 ] int(0.5005*10000)が5004になるのはなぜですか。
253 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 12:41:00 ] 丸め誤差でしょう。 切り捨て前に0.5足すとか工夫してみては如何でしょうか。 詳しくは、IEEEと丸め誤差辺りのキーワードで検索のこと。
254 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 19:57:34 ] >253 ありがとう