1 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 23:55:42 .net] 腐っても鯛? 騏も老いては駑馬に劣る? 三人の碩学が生み出したスクリプト言語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/
253 名前:sage [2009/03/04(水) 15:23:19 .net] 248です。 なんとかできました。249さんどうもです。
254 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 15:24:16 .net] sage間違えた…
255 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 11:47:59 .net] int(0.5005*10000)が5004になるのはなぜですか。
256 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 12:41:00 .net] 丸め誤差でしょう。 切り捨て前に0.5足すとか工夫してみては如何でしょうか。 詳しくは、IEEEと丸め誤差辺りのキーワードで検索のこと。
257 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 19:57:34 .net] >253 ありがとう
258 名前:デフォルトの名無しさん [2009/04/13(月) 21:36:16 .net] gawkで掲示板作りたいんですけど、 gawkが使える無料鯖どこかにありませんか?
259 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 21:58:14 .net] Linuxが入ってるレンタル鯖なら入ってるんじゃないかなぁ? レンタル鯖板できいてみたら。 さくらのFreeBSDはFreeBSDのawk(!=gawk)だった。
260 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 22:07:10 .net] >>256 さくらはgawkですか。 Windowsじゃないレンタル鯖ならawkが使えても良さそうですけど、 無料ではなかなか見つからないんですよね。 perl,ruby,phpは多いんですけどねぇ。。
261 名前:257 mailto:sage [2009/04/13(月) 22:14:30 .net] 失礼。 さくらはgawkじゃないawkですか。
262 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 13:07:13 .net] わらうw ttp://awk.info/?doc/dsl/awkplusplus.html object_variable = class_name.new[(optional parameters)] object_variable.method_name(parameters) object_variable.delete
263 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 13:30:10 .net] >>259 同じくウケた awkは永続的に使っていて,C-->C++-->Javaと乗り継いできたが,awkはこれらコンパイラ言語を使う上で 良い学習材料になってきたと思い感謝している(もちろん未だにscriptのawkをawkで書いている). 唯一awkで勉強できなかったのがOOPだったから,学習材料としてのawkがこういう方向に活路を見いだすのは 良いことかもしれない.ただし実用に向けて考えてみると,個人的にはOOPが本領を発揮するのは頭の中でalgorithmを 把握しきれなくなる程度に大きなシステムを組み上げる場合なので,果たしてそれをawkで書くかといわれると….
264 名前:260 mailto:sage [2009/04/18(土) 13:57:19 .net] s/algorithm/データ構造/
265 名前:デフォルトの名無しさん [2009/05/09(土) 23:49:39 .net] 最近rubyの勉強始めたんだが、 「rubyがあればAWKいらね」とは思えん。 逆にAWKの便利さを再認識した。 やっぱり、簡単なテキスト処理は AWKでやったほうが簡単だ。
266 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 23:58:09 .net] 各行に対して処理って場合はawkが良いね
267 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 00:37:15 .net] rubyはオブジェクト指向を強制されるから小回りがきかん
268 名前:デフォルトの名無しさん [2009/05/10(日) 01:20:35 .net] JavaScriptが動く HTML実験部屋 ttp://homepage2.nifty.com/tomoarai/java/exper.html
269 名前:デフォルトの名無しさん [2009/05/14(木) 08:38:05 .net] jawkの話題が全然出ないね。 使ってる人少ないの?
270 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 23:16:20 .net] >>266 さくっと1行で済むのが気に入ってる俺には無用だな
271 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 15:22:34 .net] >>266 Jア(オ)ーク、プラグアウッ!
272 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 01:31:39 .net] ttp://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_167 Geocoding - 住所から緯度経度を検索 だって。何これおもろい。
273 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 16:39:12 .net] {if(miso<$1){printf($1)}} miso=30 を実行すると$1が1桁の数字のときにうまくいかないんですけどなぜ?
274 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 19:43:04 .net] 文字列で比較されてるんじゃね? miso<$1-0 でやったらどう?
275 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 21:34:56 .net] >>271 ありがとうございます。でもだめでした。 文字列で比較されてるっぽいですね。
276 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 22:04:19 .net] >>270 何を入力したときに何が出て欲しいの? うまくいかないってどうなるの?
277 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 22:23:40 .net] >>273 $1が4のときに出てほしくないのに出てしまうんです...
278 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 22:31:41 .net] >>274 こんなん? BEGIN{miso=30}{if(miso<$1){printf("%d\n",$1)}}
279 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 22:46:46 .net] >>275 出てしまう理由が気になります...なんででしょう やっぱり271さんの言うとおり文字列比較してるんでしょうか?
280 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 22:54:47 .net] >>276 awk のバージョン(種別)が分からない 何を食わせてるのか分からない スクリプトは一行で書いてるのかファイルにしてるのか分からない 一行で書いているならシェルに何を使っているのか
281 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 00:38:26 .net] 文字列比較されてるなら一桁のときに上手くいかないというより 二桁のときだけ上手くいくという感じなのかね。 WindowsXPのコマンドプロンプトでgawk(3.1.5)使って下記を試してみたけど その現象再現できなかった。 gawk "{if(miso<$1){printf($1)}}" miso=30
282 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 07:43:07 .net] $awk -W version mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan compiled limits: max NF 32767 sprintf buffer 2040 $seq 1 40 | awk '{if(miso<$1)printf($1)}' miso=30 31323334353637383940 うまく動いているようだが。
283 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 18:20:09 .net] >>279 をマネさせてもらった $ awk -W version GNU Awk 3.1.6 Copyright (C) 1989, 1991-2007 Free Software Foundation. $ seq 1 40 | awk '{if(miso<$1)printf($1)}' miso=30 31323334353637383940
284 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 19:59:10 .net] miso=30って-v付けなくていけるんだ。しらんかった。
285 名前:270 のが再現できない... mailto:sage [2009/06/23(火) 01:02:55 .net] gawkは コマンドラインで指定されたファイル名が var=val という形式ならば、それは変数への代入であると解釈されます。変数 var は値 val に設定されます (これは、すべての BEGIN ブロックを実行したあとに行われます)。 やっぱりもれの XPコマンドプロンプト環境でも >gawk -W version GNU Awk 3.1.6 Copyright (C) 1989, 1991-2007 Free Software Foundation. >seq 1 40 | gawk "{if(miso<$1) print}" miso=30 31 32 33 34 35 36 37 38 39 40 って期待通りの動きだYO!
286 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 00:39:07 .net] 固定長で改行なしのファイル(6MB超)を処理することになり、 他のソフトで「改行ありの固定長」にしてから、awkで処理していたのですが… データファイルによく出てくる文字をとりあえずRSに見立てて読み込み →RSに指定した文字を連接 →固定長の1行分より長かったらその部分を切り出し していくと「改行ありの固定長」、できちゃいました。 RSに指定した文字がしばらく出てこなければ変数パンクしちゃうし、大分危なっかしいの ですが、とりあえずawkでできたのが少しうれしい。
287 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 03:25:12 .net] 改行ありの固定長をawkで読んだのなら substr($0, start, length) でばらせよw
288 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 11:29:46 .net] >>283 >284みたいな読解力ない馬鹿が湧かないように、判り易く書きましょう。 つーか、具体的なコードも出さずに「awkでできてうれしい」なんてのはチラシの裏にどうぞ。
289 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 01:27:46 .net] fold とか?
290 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 09:52:52 .net] 正規表現で空白で区切られたテキストをHTMLでいうtableにしたいです。 例) 10進 2進 8進 000 000 000 001 001 001 002 010 002 003 011 003 ↓↓↓↓↓↓↓ <table> <tr><th>10進</th> <th>2進</th> <th>8進</th></tr> <tr><td>000</td> <td>000</td> <td>000</td></tr> <tr><td>001</td> <td>001</td> <td>001</td></tr> <tr><td>002</td> <td>010</td> <td>002</td></tr> <tr><td>003</td> <td>011</td> <td>003</td></tr> </table>
291 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 12:07:49 .net] >>287 正規表現を使うほどのことではない コアの部分だけ書くとこれだけ for(i=1;i<=NF;i++) printf("<td>%s</td>", $i)
292 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 16:12:21 .net] 正規表現使ってタグを切り替えたいのかな?
293 名前:hogehoge mailto:sage [2009/07/17(金) 16:37:
] [ここ壊れてます]
294 名前:34 .net mailto: split や asort したらどうして添字が1からになるんだ! なんでだ! 仕様書読み飛ばしててデータ欠落させるところだった(´・ω・`) >>287 sed でええやん [] [ここ壊れてます]
295 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 18:35:54 .net] 今までawk '{print $3}'程度しか使って無かったが、最近これを読んでawkを見直した。 www.eecs.harvard.edu/cs152/lectures/CS152-Lecture_14-Kernighan.pdf
296 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 15:10:31 .net] ttp://www.kt.rim.or.jp/~kbk/gawk-3.1/ ここのgawkで>>17 のサンプルを試したが動かなかった。 gawk: test.awk:4: 致命的: 入出力用の双方向ソケット `/inet/tcp/0/www.yahoo.com/80' が開けません (No such file or directory)。
297 名前:hogehoge mailto:sage [2009/07/27(月) 11:13:15 .net] それはそこのサイトの人に言えよ
298 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 00:11:42 .net] いつのまにかgawk 3.1.7が出てた。
299 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 11:45:58 .net] Ruby 勉強中だけど AWK のほうが楽しいぜ(´・ω・`)
300 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 10:22:37 .net] 7月7日→[[7月7日|07月07日]] 7月28日→[[7月28日|07月28日]] 11月3日→[[11月3日|11月3日]] 12月16日→[[12月16日|12月16日]] と置き換えたいです。 perlならわりと簡単なのですが、awkで簡単にいきますか? 自分がawkのことを勉強不足だからかもしれませんけど…。
301 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 10:24:13 .net] ↑間違いました。 7月7日→[[7月7日|07月07日]] 7月28日→[[7月28日|07月28日]] 11月3日→[[11月3日|11月03日]] 12月16日→[[12月16日|12月16日]]
302 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 11:03:17 .net] 例がよくわからないんだけど,数字1桁の部分を2桁にしたいってこと?
303 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 11:13:12 .net] { gsub(/月|日/," "); printf("%02d月%02d日\n",$1,$2); } とか. フィールドセパレータがデフォルト(半角スペース)の場合ね.
304 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 11:15:10 .net] >296 Perlで簡単に書けるなら、一旦Perlコード晒してくれるか? どうも仕様がよく解らんのだ…
305 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 11:54:28 .net] print gensub(/0([0-9])([0-9])/, "\\1\\2", "g", gensub(/([0-9]+)/, "0\\1", "g", $1)) 我ながら汚ねぇなぁ(´・ω・`) >>299 の方がいいな
306 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 12:27:22 .net] >>298 ,300 置換しないで変えたいとこだけ出力するならこういう意味です。 #!/usr/bin/perl while(1){ $line = <STDIN>; if($line =~ /(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日/){ $month = $1; $day = $2; if($month >= 10) { if($day >=10){ print "$& -> [[$month月$day日]]"; } else { print "$& -> [[$month月$day日|$month月0$day]]"; } } else{ if($day >=10){ print "$& -> [[$month月$day日|0$month月$day]]"; } else{ print "$& -> [[$month月$day日|0$month月0$day]]"; } } } } 1月1日 - ユーロ導入10周年。 1月1日 -> [[1月1日|01月01]] 12月31日 - ニューヨークのマンハッタン橋開通100周年。 12月31日 -> [[12月31日]] 8月21日 - ハワイ州州制50周年。 8月21日 -> [[8月21日|08月21]] 10月1日 - パラオ独立15周年。 10月1日 -> [[10月1日|10月01]]
307 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 14:16:23 .net] なんか素直にPerlでやったほうが楽そうだなあ、それ。 ちなみに、そのコードじゃ無限ループするぞ。 #!/usr/bin/perl while($line = <STDIN>) { if($line =~ /(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日/) { $month = $1; $day = $2; if($month < 10 || $day < 10) { printf "%s -> [[%d月%d日|%02d月%02d]]\n", $&, $month, $day, $month, $day; } else { print "$& -> [[$month月$day日]]\n"; } } }
308 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 14:44:03 .net] だめだ…コードの意味は分かるが,仕様が良く分からん.
309 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 14:47:14 .net] 7月7日 という文字列を [[7月7日|07月07日]] と置き換える、ってことでしょ。 なんで分からんかなぁ。そっちのが分からん。
310 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 14:53:30 .net] 入力が07月07日だったら, 出力は[[07月07日|07月07日]]になるよね?これはOK? そもそも,そういう入力は起こりえないの?
311 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 18:17:38 ?2BP(0) .net] >>305 そんな感じです。 目的を言っていないので、何がやりたいのかよくわからないのだと思います。 早い話、Wikiの記法を使ってリンクを張りたいのです。 0をくわえて桁を調整している理由は 文字列としてソートして正しく昇順に並ぶようにするためです。例えばWikipediaなら 7月7日のときは、[[7月7日|07月07日]]とすることで リンクはja.wikipedia.org/wiki/7 月7日 表示される文字列は 07月07日 となります。 これをソートできるテーブルの要素にします。参考までに ja.wikipedia.org/wiki/Help:%E8%A1%A8%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9#.E5.86.8D.E6.95.B4.E5.88.97.E5.8F.AF.E8.83.BD.E3.81.AA.E8.A1.A8 この処理はawkでも可能なことは可能だったんですが、無知なせいか おそろしく不格好になりました。 >>306 それ思いました。できれば 07月07日->[[7月7日|07月07日]] のように処理したいです。
312 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 18:26:07 .net] >>303 それです。そういう意味です。
313 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:17:06 .net] # gawk による match 関数の拡張を使っている. # 一行に複数回現れた場合は無視. BEGIN { F = "(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日"; } { if ($0 ~ F) { match($0, F, a); if (a[1]+0 < 10 || a[2]+0 < 10) { sub(a[0], sprintf("[[%d月%d日|%02d月%02d日]]", $0, a[2], a[1], a[2], a[1])); } else { sub(a[0], sprintf("[[%d月%d日]]", $0, a[2], a[1])); } } print $0; }
314 名前:309 mailto:sage [2009/08/06(木) 21:21:15 .net] # 訂正. BEGIN { F = "(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日"; } { if ($0 ~ F) { match($0, F, a); if (a[1]+0 < 10 || a[2]+0 < 10) { sub(a[0], sprintf("[[%d月%d日|%02d月%02d日]]", a[1], a[2], a[1], a[2])); } else { sub(a[0], sprintf("[[%d月%d日]]", a[1], a[2])); } } print $0; }
315 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 23:59:03 .net] >>310 完璧です。今度からこれを使います有難うございました。 $ cat test.txt 1月1日 #m月d日 01月1日 #0m月d日 1月01日 #m月0d日 01月01日 #0m月0d日 2月10日 #m月dd日 02月10日 #0m月dd日 11月3日 #mm月d日 11月03日 #mm月0d日 12月16日 #mm月dd日 $ awk -f test.awk test.txt [[1月1日|01月01日]] #m月d日 [[1月1日|01月01日]] #0m月d日 [[1月1日|01月01日]] #m月0d日 [[1月1日|01月01日]] #0m月0d日 [[2月10日|02月10日]] #m月dd日 [[2月10日|02月10日]] #0m月dd日 [[11月3日|11月03日]] #mm月d日 [[11月3日|11月03日]] #mm月0d日 [[12月16日]] #mm月dd日
316 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 06:34:47 .net] 最初にそういうテストバターンを出そうね
317 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 11:45:35 .net] ここの住人がコーディング好きだからって甘えやがって(´・ω・`) > perlならわりと簡単なのですが、awkで簡単にいきますか? って言ってるんだから、「いきます」って答えりゃいいんだよな
318 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 11:46:39 .net] >>312 なにその死の行進こわい
319 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 11:36:30 .net] バターン テストのデスマーチ
320 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 09:46:09 .net] >>294 3.1.7ベースのWindows用バイナリ、出ました。 ttp://www.kt.rim.or.jp/%7Ekbk/gawk-3.1/index.html#GAWK-DOWNLOAD
321 名前: 222.248.109.70 mailto:age [2009/08/17(月) 17:45:07 .net] 自動焼人 ★ = 自動保守 ◆KAWORUKOFI = 自動保守#K9K?_D[L 名言集 その3 『いつもサボってばかりのキャップがウゼえ』 yutori7.2ch.net/test/read.cgi/news4vip/1249830540/ ID:PVAf+dux0 = 自動焼人 ★ > 71 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:58:57.28 ID:PVAf+dux0 > >>69 > 大変って言うか > 毎日、報告されたのを見て、判断して、処理して、完了報告して、以下ループ。 > ちょっとでもミスすると、普段は作業もしてないキャップさんたちがさんざん文句言ってきて > その言いわけを考えないと、キャップはく奪されたりアカウント凍結されたりするから > > 登録されてから一年以上経って、やっといいたいこと言えるようになってきたよ。 ---------------------------------------------- この自動焼人 ★メールマガジンの配信停止をご希望される方は qb5.2ch.net/test/read.cgi/sec2chd/1250169591/ にて自動焼人 ★までご連絡ください
322 名前:デフォルトの名無しさん [2009/10/24(土) 17:23:04 .net] 最後の10行を処理したくない場合、どう書けば良いでしょうか?
323 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 18:19:03 .net] 最後まで読まずに最後の10行かどうか判定する方法は無いだろうな 処理対象がファイルなら、事前にwc -lか何かで行数調べて awk に渡してみては
324 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 18:52:07 .net] 成る程、これ、という方法は無さそうですね ちょっと考えながらやってみます
325 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 19:15:52 .net] とりあえず、こんな感じにしました BEGIN { SKIPTAILS = 10 } { line = buf[1] for(i=1;i<SKIPTAILS;i++) buf[i] = buf[i+1] buf[SKIPTAILS] = $0 } NR > SKIPTAILS { # lineを処理 }
326 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 22:11:41 .net] >>321 考え方は同じだけど、forが気になったので リングバッファで処理するようにしてみた。 BEGIN { SKIPTAILS = 10 ringpos = SKIPTAILS } { ringpos = (ringpos + 1) % SKIPTAILS line = buf[ringpos] buf[ringpos] = $0 } NR > SKIPTAILS { # lineを処理 }
327 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 23:18:06 .net] ありがとうございます リングバッファ、勉強になりました 使わせて頂きます
328 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 20:22:22 .net] >>42 sed awk して船山に登る だろ?
329 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 12:06:14 .net] 質問です gawkで { printf("%d,%s\n", NR, $0 ) > FILENAME; } という行頭に番号を振って保存する処理をして batファイルで一括処理させようとしたんですが c:\windows\gawk\gawk -f g:\作業用\n.awk g:\作業用\*.txt 実行結果が ファイル1 ファイル2 1A 4D 2B 5E 3C 6F になります ファイル2も 1D 2E 3F にするにはどうしたらよいでしょうか?
330 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 12:27:22 .net] FNR
331 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 12:35:21 .net] >>326 おお、出来た! 迅速な回答ありがとうございます
332 名前:デフォルトの名無しさん [2009/12/21(月) 13:53:34 .net] 年末にパソコンを買い換えようと思って機種選びをしていてふと気づいた、 あれ、vaioのOSがWindows7 64bitバージョンに・・・ ダメじゃん!gawkが使えなくなってしまう・・・ うーん、、、またXPを買うべきか・・・悩む・・・
333 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 14:21:01 .net] >>328 自分でコンパイルし直せばいいだけじゃないの?
334 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 03:52:20 .net] プログラミング言語AWK復刊だってね。 ttp://slashdot.jp/developers/article.pl?sid=10/01/06/0345207 多分必要性を感じない程度には使ってるから、買わないけど嬉しい。 布教用に買うってのもちょっとな。
335 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 11:08:56 .net] AAA BBB CCC … -O ZZZ YYY XXX … awk新参です。 -O(オプション)を検索し、 -Oとそれ以降をリダイレクトしたいのですが… 良い方法、ありますでしょうか
336 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 15:36:31 .net] リダイレクトってどういう意味で使ってる? その AAA で始まる文字列も一体どういうものなの。 コマンドライン引数なのか、ファイルから読み込んでくるのとか。 用語と状況はきちんと書いてくれ。
337 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 16:19:07 .net] D:\My Documents\gawk\331>type 331.txt AAA BBB CCC … -O ZZZ YYY XXX 0… AAA BBB CCC … -O ZZZ YYY XXX 1… AAA BBB CCC … -O ZZZ YYY XXX 2… D:\My Documents\gawk\331>type 331.awk {match($0, " -O .*", a); print a[0];} D:\My Documents\gawk\331>gawk -f 331.awk 331.txt >a.txt D:\My Documents\gawk\331>type a.txt -O ZZZ YYY XXX 0… -O ZZZ YYY XXX 1… -O ZZZ YYY XXX 2… D:\My Documents\gawk\331>
338 名前:331 mailto:sage [2010/02/28(日) 18:43:32 .net] レスありがとうございます。 >>332 すみません。書き直します。 AAA BBB CCC … -O ZZZ YYY XXX … と書複数行書かれたファイルがあり、 「-O」以降の文字列を別ファイルに保存する ってことをしたかったのです。 >>333 エスパーな文だったのにありがとうございます。 想定してたのはそんな感じです。 ただ以下のエラーが出て上手くいきません… gawk: 331.awk:2: fatal: match() cannot have 3 arguments match使ってるのにaという3つ目の引数を使ってるから…ってことでしょうか…?
339 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 19:00:04 .net] Q: make spits out errors like Makefile.awk:256: fatal: match() cannot have 3 arguments A: Your AWK is too old to recreate the Makefile. The build is done based on the distributed Makefile. Everything shall compile successfully though. So if the compile succeeds just ignore such errors, please.
340 名前:335 mailto:sage [2010/02/28(日) 19:22:38 .net] {print substr($0, match($0, " -O .*")+1);}
341 名前:331 mailto:sage [2010/02/28(日) 20:03:12 .net] >>336 出来ました。まさか本日中に解決できるとは思いませんでした。 ありがとうございます。大変勉強になりました。
342 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 22:25:50 .net] ボソ 本当に勉強になったかどうかは疑問だ・・・ おっと一言オウかったか。
343 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 15:04:38 .net] gsub()とかで引数に変数を利用したいのですがどうすればいいのでしょうか? gsub(str1,str2)みたいに。
344 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 21:44:52 .net] >>339 man gawkより gsub(r, s [, t]) For each substring matching the regular expression r in the string t, substitute the string s, and return the number of substitutions. If t is not supplied, use $0. An & in the replacement text is replaced with the text that was actually matched. Use \& to get a literal &. (This must be typed as "\\&"; see GAWK: Effective AWK Programming for a fuller discussion of the rules for &'s and backslashes in the replacement text of sub(), gsub(), and gen sub().)
345 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 21:36:03 .net] awk 'BEGIN{x="ABCDE";y="BCD";z="XXX";gsub(y,z,x);print x}' 何が難しいのかよくわからん。
346 名前:デフォルトの名無しさん [2010/03/17(水) 22:07:37 .net] 時々awkだと遅いのでperlに書き換えるという人がいますが、 実際のところ速くなるんでしょうか? 私の環境ではforループや加算などはawkのほうが速そうですが、 どのような処理の場合にperlのほうが速くなりますか? $ time mawk 'BEGIN{x=0;for(i=1;i<=1000000;i++){x=x+i};printf("%f\n" ,x)}' 500000500000.000000 real 0m0.131s user 0m0.120s sys 0m0.000s $ time gawk 'BEGIN{x=0;for(i=1;i<=1000000;i++){x=x+i};print x}' 500000500000 real 0m0.289s user 0m0.284s sys 0m0.000s $ time perl -e '$x=0;for($i=1;$i<=1000000;$i++){$x=$x+$i};print $x' 500000500000 real 0m0.379s user 0m0.376s sys 0m0.004s
347 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:26:14 .net] >>342 「awkだと遅いのでperlに書き換えるという人」 に聞けば分かる
348 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 09:08:06 .net] >>342 遅いというawkはgawkなの? 素のawkよりgawkの方が早くなかったっけ?
349 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 01:03:01 .net] カーニハンとパイクの『プログラミング作法』にawkとperl (とCとC++とJAVA)の比較があるな 今のマシン使って書き換えなきゃならないほど遅いって どんな処理なんだろう?
350 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 13:44:10 .net] >342 awk 等を組み合わせて実行するとプロセス起動のコストがかかるので perl で一つに纏める、という話じゃないの?
351 名前:デフォルトの名無しさん [2010/03/22(月) 17:35:11 .net] 文字コードのコードを変数にして文字列を操作することってできますか? 文字列中の全角文字を半角文字に変える華麗な方法を模索しています。
352 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 18:01:58 .net] Use iconv.
353 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 18:25:10 .net] > 文字コードのコードを変数にして文字列を操作することってできますか? なにをしたいのかよくわかんないんだけど。 > 文字列中の全角文字を半角文字に変える華麗な方法を模索しています。 華麗なのはtrコマンドを使う方法。ただtrがマルチバイトをうまく扱ってくれるか どうかはこころもとない。 Perlならtrを、Rubyなら文字列クラスのtrメソッドを、 Pythonならstringモジュールのmaketrans関数と文字列のメソッドtransleteを使う、 という手がある。 awkないし(tr以外の)古典的なツールで華麗にやる方法はないと思う。