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/
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以外の)古典的なツールで華麗にやる方法はないと思う。
354 名前:デフォルトの名無しさん [2010/03/24(水) 17:11:16 .net] Excelで 全角半角変換は ASC() 半角全角変換は JIS()
355 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 08:34:11 .net] >>347 1. EUC-JPにして(nkfとか)kakasi で、戻す 2. それだったら最初から、nkf -Z 3. gawk前提で、文字毎に処理(LANGを指定して子プロセス起動) awkの中で閉じてやるのはめんどくさそう
356 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 23:34:27 .net] gawk 3.1.6 system(cmd) を使うと、アンチウィルスソフト(kaspersky)の アプリケーション履歴にバッチファイルが登録されるのを発見。 close(cmd) しても同じ。 while(cmd|getline>0){} で代用すると残らなくなった。??
357 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 00:22:57 .net] 仏でブルカ否定の決議採択 「国の価値観と相容れない」 www.cnn.co.jp/world/AIC201005120004.html テヘランで、ブルカを着て入出国する時って、顔のチェックどうするんだろう。 他人や男でもばれないの?
358 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 00:23:49 .net] >>353 誤爆スマン
359 名前:デフォルトの名無しさん [2010/05/14(金) 13:38:24 .net] pc11.2ch.net/test/read.cgi/linux/1215431118/65
360 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 10:51:40 .net] awkのprintについてご教示下さい。 下のような出力が有った場合、例えば lrwxrwxrwx 1 root root 70 May 18 10:37 hoge ls -al | awk '{print$1$2$2$4$6$7$8$9}' とすれば「$5」の 「70」を抜くことが出来ますが、これが$100とかまで続く場合、 「$5」だけを抜きたい場合記述が大変になります。 何か良い方法は無いものでしょうか?
361 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 11:01:32 .net] $nに代入があると、その時点で$0が再構成される。 区切りの空白が$5のあったところだけ2個になるのが気にならなければ、 ls -al | awk '{$5 = ""; print}' とすればよい。 空白2個を修正するならこうする。 ls -al | awk '{$5 = ""; print $0}' | awk '{$1 = $1; print}'
362 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 11:03:15 .net] $0 は余計だった。 ls -al | awk '{$5 = ""; print}' | awk '{$1 = $1; print}'
363 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 11:07:03 .net] 2つめのawkの$1 = $1は何のため?
364 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 11:34:06 .net] なにもしないと、$0は読み込んだそのままなので空白2個は空白2個のまま。 $1=$1で代入してやると、$1, $2, ...を空白1個でつないだものが$0に代入されるので、 空白2個だったところが空白1個になる。
365 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 11:35:04 .net] 2つめのawkに食わせた時点で$n (n>0)は詰まるけど$0は入力行そのまま 空白2個なので$0を再構成すると空白1個区切りになる
366 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 12:21:12 .net] >>357-358 非常に解りやすいご説明、ありがとうございます。 なるほど代入することで解決するんですね。 勉強になりました。
367 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 15:08:38 .net] $1 = $1 ってイマイチよく解らん $1ってFSで区切られた一つ目だよね? なんでそれ自身を自分に代入したらスペースが消えるん?
368 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 15:27:35 .net] $0の再構成が行われるからって説明されてるだろ。 $0の再構成とはいったんばらした$1,$2,...をOFSを挟んで つなげ直すってことなので、何で区切られていたかは 保存されない。
369 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 15:41:56 .net] >>364 >$1=$1で代入してやると、$1, $2, ...を空白1個でつないだものが$0に代入される って約束事を覚えておけってことかい?
370 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 15:42:39 .net] ちょっと気になって試してみた。 % echo a b | gawk '{OFS="-";$1=$1;OFS="=";print}' a=b 再構成は$1=$1をやってすぐじゃなくて、次に$0が使われるとき、ってこと なのかな?
371 名前:365 mailto:sage [2010/05/18(火) 16:27:59 .net] 解った www.kt.rim.or.jp/~kbk/gawk-3.1/gawk.html 警告: 一部のバージョンのawkは NFを減じたときに$0の再構築を行わない。 結局のところ、awkにレコード全体の再構築を強制したときにはその時点で フィールドの値とOFSが使われる。再構築を行うためには、何らかの無害な 代入を行う: $1 = $1 # force record to be reconstituted 賢くなった。あんがと。
372 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 16:46:58 .net] awkは奧が深いのぉ
373 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 22:24:52 .net] 久しぶりにいいもんを見させてもらいますた><
374 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 09:55:14 .net] 知らなかった。 勉強になった。
375 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 15:25:46 .net] みんな>357のお蔭で多くを学んだな。
376 名前:デフォルトの名無しさん [2010/05/29(土) 04:53:07 .net] 名前: E-mail: 内容: cygwinだと % cut -f1 -d, hoge.csv より % awk -F, '{print $1}' hoge.csv の方が速かった。 #実行時間ね #Perl?シラネ
377 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 11:45:38 .net] >>372 sed -e 's/,.*//'でもawkと同じくらいだから、cutの実装が遅いんだね。 cutが無駄にオプション多い所為じゃない?
378 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 12:04:05 .net] 手元のlinux環境だとcutの方が速いという普通の結果でしたが。 hoge.csvは6桁の乱数3つを「,]で区切って並べた100万行の ファイルです。 % time cut -f1 -d, hoge.csv >/dev/null cut -f1 -d, hoge.csv > /dev/null 0.21s user 0.01s system 99% cpu 0.222 total % time awk -F, '{print $1}' hoge.csv >/dev/nulll awk -F, '{print $1}' hoge.csv > /dev/nulll 1.52s user 0.03s system 99% cpu 1.558 total ちなみにバージョンは cut (GNU coreutils) 8.5 GNU Awk 3.1.7
379 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 12:22:48 .net] あーなるほど、なんか判った。cygwinのfgetc()が遅いからじゃないかな。 fgetc()とfgets()で時間を較べたときにfgetc()の方がずっと遅かった記憶がある。
380 名前:デフォルトの名無しさん mailto:sage [2010/09/13(月) 14:14:54 .net] xgawk (gawkでなく)にとあるwebページを食べさせると、XMLERRR (not well-formed)で中断します。 そのページがwell-formedか極悪かは私にとってどうでもよく、単に内容を得
381 名前:たいだけなので、文末まで処理し終えて欲しいのです。 どうにかならないでしょうか。 [] [ここ壊れてます]
382 名前:デフォルトの名無しさん mailto:sage [2010/09/25(土) 14:55:22 .net] シェルスクリプト内でパイプ入力されたものを処理する アクションをヒアドキュメントで書く事は出来るでしょうか。
383 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 14:57:18 .net] 質問です。 データが |1|aaa| |2|bbb| |3|ccc| などとなっているとき aaa bbb ccc を取り出そうとして awk 'FS="|"{print $3}' ファイル名 としたんですが、1行目だけがうまくとれません。 データファイルの1行目を空行にすれば解決できないことはないんですが、 空行を入れ忘れてしまう懸念があります。 どうすればいいんでしょうか?
384 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 15:01:46 .net] やりたいことは awk 'BEGIN {FS="|"} {print $3}' じゃないかと思うんだけど
385 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 15:08:38 .net] 378です。 >>379 どうもありがとうございました。
386 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 18:42:12 .net] gensub()にて、マッチした10番目以降のグループの指定の仕方を教えてください。 下記サイトでは、17番目まで普通に指定できるような事が書いてあるけど、 tounderlinedk.blogspot.com/2010/08/gensub-n-awk.html gensub(pattern,"\\10","g",$2) とかくと \\1(マッチ箇所)と0(文字)として解釈されちゃって上手くいなかい。 シェルスクリプト風かと思って、\\{10} も試したけどダメダッター。 GNU Awk 3.1.5です。
387 名前:381 mailto:sage [2010/09/27(月) 19:00:47 .net] BSDのjmanには、1から9までの数字って明記されてるなあ。 実装によって違うのかなあ パターンを動的に生成してマッチさせようとしてるから結構困る(´・ω・`) www.linux.or.jp/JM/html/GNU_gawk/man1/gawk.1.html
388 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 19:04:47 .net] >>381 マニュアルには1から9までって書いてあるし Within the replacement text s, the sequence \n, where n is a digit from 1 to 9, may be used to indicate just the text that matched the n'th parenthesized subexpression. ソースの該当箇所(builtin.cの2542行目あたりから)みても1桁限定のロジックだよ。(3.1.7調べ) int dig = scan[1] - '0'; なんてやってる。
389 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 19:08:03 .net] 一旦ぶった切るしかないんじゃね
390 名前:381 mailto:sage [2010/09/27(月) 19:12:31 .net] >>383 どうもありがとうございます。 >>384 ちょっと見栄え悪くなるけどそうする(´・ω・`)
391 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 21:27:29 .net] >>381 なんでそこのひとは16までできたんだ?
392 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 00:32:52 .net] 10の代わりに:を使っていたりして。
393 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 03:15:24 .net] このスレが盛況なのが珍しいから 記念パピコ。
394 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 03:41:50 .net] 15年以上前だけどawkの勉強始めて同時にperlの勉強もしてたら 気付いたらperlばっかりやっててawkすっかり忘れてしまったなぁ 今はperl捨てて専らpythonやってるけどawkもいいよね
395 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 09:40:13 .net] Busyboxに組み込めば、それこそ炊飯器や冷蔵庫でも動くからなあ。 手軽であるにも関わらず、結構高度な処理もガリガリ書けるから好き。 Cとシェルスクリプトが好きだから、文法的にもしっくり来る。 上位互換のPerlも大好き。
396 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 14:37:59 .net] >>376 ですが、誰もかまってくれないので寂しさで死にそうです。
397 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 14:52:08 .net] >>391 どれでも好きなのを選べ 1. xgawkを改造 2. エラーになるXMLを事前に修正してwell-formedにしてから食わせる 3. xgawkは捨てて別の言語、ライブラリを試す
398 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 17:23:08 .net] jawkがjwalkに見えてしまう
399 名前:デフォルトの名無しさん mailto:sage [2010/10/01(金) 11:21:26 .net] 動く環境の多さ順にインタプリタを選ぶんなら、 シェルスクリプト > awk >>> perl >>>>> python >>>>> ruby >>> haskel etc. となるだろうな。 シェルスクリプトはシェル依存な部分が多く、perl ほど高機能なものも要らない。 そんな時、小さな端末でもスマートに動いてくれる awk にちんこ勃つ。 >>389 言語に捨てるも拾うもないよ。その時々に都合の良いものを組み合わせて使うのがUNIX的な発想。
400 名前:デフォルトの名無しさん mailto:sage [2010/10/01(金) 15:33:40 .net] >>394 「一発やろう」ですね!
401 名前:デフォルトの名無しさん mailto:sage [2010/10/09(土) 04:40:48 .net] awk最近勉強してる。perlより全然簡単。 これなら俺でも挫折しなくてすみそう
402 名前:デフォルトの名無しさん mailto:sage [2010/10/09(土) 04:57:14 .net] >>396 がんば!
403 名前:デフォルトの名無しさん mailto:sage [2010/10/21(木) 20:16:46 .net] sjisで書いた /ー/{print} を実行すると awk: awk: ^ 正規表現が終端されていません。 awk: 致命的: [ または [^ が対応しません。: /[/{print}/ のエラーになってしまいます。 ーの2バイト目が[なせいだと思いますが、どう対応したらいいでしょうか? 入力ファイルはsjisで書かれていて、文字コード変換はできません。
404 名前:デフォルトの名無しさん mailto:sage [2010/10/21(木) 20:55:41 .net] >>398 環境の問題なんだから、実行環境くらいまともに書けよ。
405 名前:デフォルトの名無しさん mailto:sage [2010/10/21(木) 21:38:24 .net] >>398 gawk を使う
406 名前:デフォルトの名無しさん mailto:sage [2010/10/21(木) 22:52:57 .net] 環境はCentOS-5.5-x86_64でGNU Awk 3.1.5です。 /bin/awkはシンボリックリンクで、実体はgawkでした。
407 名前:デフォルトの名無しさん mailto:sage [2010/10/21(木) 23:49:35 .net] >>401 --help 嫁
408 名前:デフォルトの名無しさん mailto:sage [2010/10/22(金) 01:41:07 .net] Windows7(64bit)で使えるawkありますか?
409 名前:デフォルトの名無しさん mailto:sage [2010/10/22(金) 02:19:30 .net] 32bit版のawkをを使うんじゃダメ?
410 名前:398 mailto:sage [2010/10/22(金) 07:32:34 .net] こうすることで対応できました。 /\x81\[/{print}
411 名前:デフォルトの名無しさん mailto:sage [2010/10/22(金) 09:41:36 .net] それでいいなら、/ー[]/でもいい希ガス。 根本的な解決になってないけどねぇ。
412 名前:デフォルトの名無しさん mailto:sage [2010/10/22(金) 13:52:10 .net] シングルクオーテーションやダブルクオーテーションの使い分けじゃね〜